Я работаю с файлом. это код:Почему файл не закрыт немедленно в .net?
Private Sub WriteXml(ByVal txtName As String)
If Not Directory.Exists("GraphXml") Then
Directory.CreateDirectory("GraphXml")
End If
_fileName = "GraphXml\Graph_" & txtName & ".xml"
Dim checkCondition As Boolean = False
_file = My.Computer.FileSystem.OpenTextFileWriter(_fileName, False)
_file.WriteLine("<?xml version=""1.0"" encoding=""UTF-8""?>")
_file.WriteLine("<n0>")
DepthFirstSearch(StaticService.AllNodes(0))
_file.WriteLine("</n0>")
_file.Close()
_file.Dispose()
End Sub
Этот метод вызывается при нажатии кнопки. Если я делаю 1 клик за 2 секунды, возникает ошибка: «другой процесс использует файл». Я не мог понять проблему, потому что я использую file.close. Я думал, что это может иметь отношение к проблеме с потоками, и я задал этот вопрос: и я попытался с потоком. такой код:
when a method is called , which thread will be run in c# and java?
и я попытался с резьбой. Код:
Dim thread As Threading.Thread = Nothing
Public Sub CreateXml()
'cok hızlı tıklandıgı zaman xml olusturmak için çalışan thread önceki thread in file.close yapmasını bekler
' If Not checkThread Then
Dim txtName As String = InputTxt.Items(InputTxt.SelectedIndex)
txtName = txtName.Substring(0, txtName.IndexOf("."))
While Not IsNothing(thread) AndAlso thread.IsAlive
Dim a = ""
' wait loop
End While
thread = New Threading.Thread(Sub() WriteXml(txtName))
thread.IsBackground = False
thread.Start()
End Sub
Это также не работает. я не мог найти никаких предложений. Я буду ждать ответа.
Благодаря
Совет: вам не следует создавать свои собственные потоки, если вы можете просто использовать «ThreadPool» вместо этого (например, «ThreadPool.QueueUserWorkItem (...)» или использовать TPL (т.е. «Задача», представленная в .NET 4). Создание потоков - очень дорогостоящая операция. – stakx
Вопрос: Сколько времени требуется для записи файла WriteXml? Вы говорите, что вы нажимаете кнопку раз в две секунды, но процесс записи на самом деле занимает гораздо меньше времени? – stakx
Я понял, что это занимает около 10-15 мс. Однако, я думаю, метод close() не отвечает быстро. – user14570