VB.Net线程似乎运行了两次,导致文件访问出现问题
我有一些非常基本的代码,它接受一个字符串列表,并为每个字符串创建一个新线程 然后线程写入一个名为字符串的文件,因此应该是唯一的,但我得到了访问冲突 我在VS2010中尝试了调试器选项,当我单步执行时,它不会给我带来文件访问问题,但它会在每个循环中写入两行,因此我假设它仍然存在运行两次线程的问题 调用线程的代码:VB.Net线程似乎运行了两次,导致文件访问出现问题,vb.net,multithreading,file-io,Vb.net,Multithreading,File Io,我有一些非常基本的代码,它接受一个字符串列表,并为每个字符串创建一个新线程 然后线程写入一个名为字符串的文件,因此应该是唯一的,但我得到了访问冲突 我在VS2010中尝试了调试器选项,当我单步执行时,它不会给我带来文件访问问题,但它会在每个循环中写入两行,因此我假设它仍然存在运行两次线程的问题 调用线程的代码: For Each x In x_list Dim trd as new Thread(DirectCast(Sub() tp(x), ThreadStart)) Next 线程的代
For Each x In x_list
Dim trd as new Thread(DirectCast(Sub() tp(x), ThreadStart))
Next
线程的代码:
Private Sub tp(ByVal x_in As String)
Dim res_file As New StreamWriter("C:\result_" + x_in + ".txt", True)
For i = 1 to 5
res_file.WriteLine(DateTime.Now.ToString)
Next
res_file.Close()
End Sub
你在这里引入了一个不必要的概念: 然后你就遇到了C#中的同一个众所周知的问题——你捕获的是一个不断变化的变量,直到它被设置为循环中的最后一个值。1 试着只做:
For Each x In x_list
Dim trd as new Thread(DirectCast(tp, ParameterizedThreadStart))
trd.Start(x)
'TODO - Does trd get stored anywhere?
Next
我看了一个例子,它讨论了C#5的变化,但我认为VB.Net没有相应的变化。感谢您抽出时间回答一个格式错误的问题!我能够使用提供的链接解决原始代码,但我在使用更简单的parameterizedthread解决方案时遇到了一些问题,“参数未指定为private sub的参数x_in…”
For Each x In x_list
Dim trd as new Thread(DirectCast(tp, ParameterizedThreadStart))
trd.Start(x)
'TODO - Does trd get stored anywhere?
Next