Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net线程似乎运行了两次,导致文件访问出现问题_Vb.net_Multithreading_File Io - Fatal编程技术网

VB.Net线程似乎运行了两次,导致文件访问出现问题

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 线程的代

我有一些非常基本的代码,它接受一个字符串列表,并为每个字符串创建一个新线程

然后线程写入一个名为字符串的文件,因此应该是唯一的,但我得到了访问冲突

我在VS2010中尝试了调试器选项,当我单步执行时,它不会给我带来文件访问问题,但它会在每个循环中写入两行,因此我假设它仍然存在运行两次线程的问题

调用线程的代码:

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