我正在尝试在VB.NET中启动一个新线程,并且我遇到了语法问题。
在C#中,我们可以使用以下方式执行相同的任务:
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => new Thread(TaskToRun).Start(manualResetEvent));
taskOne.Wait();
TaskToRun
是一个带有单个对象参数的void方法。
所有在线转换器生成类似于此的VB.NET代码:
Dim manualResetEvent = New ManualResetEvent(False)
waitHandles.Add(manualResetEvent)
Dim taskOne = Task.Factory.StartNew(Function() New Thread(AddressOf TaskToRun).Start(manualResetEvent))
taskOne.Wait()
答案 0 :(得分:2)
没有理由启动一个除了启动线程之外什么都不做的任务。您应该直接创建任务。您应该可以通过以下方式在VB中执行此操作:
Dim manualResetEvent = New ManualResetEvent(False)
waitHandles.Add(manualResetEvent)
Dim taskOne = Task.Factory.StartNew(Function() TaskToRun(manualResetEvent))
taskOne.Wait() ' Blocks until task is complete
如果要强制任务使用专用线程,可以通过传递LongRunning提示来执行此操作。使用默认的TaskScheduler,这将在专用线程(而不是ThreadPool)上启动任务。
作为参考,等效的C#将是:
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => TaskToRun(manualResetEvent));
taskOne.Wait();