我有一些非常基本的代码,它接受一个字符串列表,并为每个字符串创建一个新线程。
然后该线程写入一个以字符串命名的文件,因此应该是唯一的但我会受到访问冲突。
我在VS 2010中尝试调试器选项并且当我单步执行时它没有给我文件访问问题但是它每个循环写入两行所以我假设它仍然有运行线程两次的问题
调用线程的代码:
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
答案 0 :(得分:1)
您在此处引入了不必要的Lambda:
Sub() tp(x)
然后你对C#中同样众所周知的问题感到茫然 - 你所捕获的是变量,它一直在变化,直到它被设置为循环中的最后一个值。 SUP> 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
1 参见例如Closing over the loop variable considered harmful讨论了C#5的变化,但我认为VB.Net没有相应的变化。