我有 VS2010,我正在开发一个 Windows 窗体应用程序。
因此,我动态创建了线程(取决于用户输入),这些线程的处理可能需要一段时间(极端情况下需要几天)。所以我在表单上放了一个按钮,希望能够“暂停”或“暂停”线程。我查看了 .suspend 方法,它已被替换(我尝试过使用它,但有时它确实会失败 - 导致 UI 崩溃)所以我发现的新方法是“waithandle”。我已经阅读了这方面的文档,但我不知道如何使用它。
这是每个线程的基本结构:
Do
'time consuming operations
loop 'a number of times
然后在一个单独的按钮中,我想放置暂停代码。快速暂停并不是那么重要,在循环的下一次运行时暂停就可以了(每次运行都非常快,它只会执行数百次)。我假设我必须将等待句柄检查放在循环的开头,但我实际上并不知道如何实现这一点。这是我的等待句柄暗码:
Dim waitHandles As System.Threading.EventWaitHandle = New System.Threading.AutoResetEvent(True)
所有线程都将立即暂停(主 UI 线程除外),所以我认为这意味着我只需要一个等待句柄,但我不确定这一点。
无论如何,如果有人能告诉我哪些代码进入了 do 循环,哪些代码进入了暂停按钮,我想我可以完成其他所有工作。:)
非常感谢!
弗雷泽
来自评论:
谢谢!我让它工作了。这是我的暗示:
Dim mre As New System.Threading.ManualResetEvent(True)
(那是在代码的顶部(就在'public class form 1'下面)然后在它具有的线程中:
mre.WaitOne(),
最后在暂停/取消暂停它拥有的线程的按钮中:
mre.Reset() 'to resume the threads and, mre.Set() 'to pause the threads