Bas*_*sic 3 c# vb.net multithreading
我有一个List(Of IWorker)包含许多混凝土的.IWorker反过来有一个Startup()和Shutdown()方法.
在Worker类中,Startup()创建一个新的工作线程然后返回.Shutdown()目前设置私人ShutDownRequested旗帜并返回.工作线程检查该标志(最坏的情况是每隔几秒).
这一切都很好,但目前父应用程序无法确定工人是否已完成关闭.
我可以看到很多方法,但我不确定最好的方法是什么.
State属性到IWorker.应该工作,但我将轮询状态似乎有点讨厌.Sunclock的私有对象Shutdown()?任何文章,建议或建议表示赞赏.C#或VB中的例子很好.
Shutdown()如果你想要关闭是一个阻塞操作,我不会尝试使用锁定来阻止.
如果您可以使用.NET 4,我会将您的内部执行方法设为Task.然后你可以直接调用Task.Wait()阻塞直到它完成.
如果你必须使用.NET 3.5或更早版本,我会在Shutdown()内部调用WaitHandle,例如a ManualResetEvent.关机代码可能如下所示:
' Include:
Private shutdownEvent as ManualResetEvent = new ManualResetEvent(false)
Sub Shutdown()
ShutDownRequested = True
shutdownEvent.WaitOne()
End Sub
Run Code Online (Sandbox Code Playgroud)
然后轮询循环(线程操作)将执行:
Sub Execute()
While Not ShutDownRequested
' Do your work
End While
' Before you exit, "set" the event:
shutdownEvent.Set()
End Sub
Run Code Online (Sandbox Code Playgroud)