简化,我有WPF应用程序,它有两个类:一个带GUI的主窗口类和一个工作类,它在一个文件上运行。在主窗口中,当用户单击按钮时,工作线程启动。
我想在主窗口中创建一个按钮来停止工作。然而,没有杀死一个线程,但通知它,该用户已经中止了一个线程并允许它关闭编写器并保存文件。
我在stackoverflow上寻找了很长时间,但所有问题都与我的问题无关。我想指出的是,我没有迭代循环等,因此我不能使用标志。我想在一个线程类的主窗口中引发一个事件。我怎么能这样做?
答案 0 :(得分:3)
在主窗口类中创建CancellationTokenSource。将CancellationToken发送给工作线程。对工人进行编码以观察令牌。 MSDN参考了取消模式,在那里查看。
每当需要取消时,通过调用从UI线程启动它 CancellationTokenSource.Cancel()
您不必循环,您可以通过等待令牌的WaitHanndle来观察是否取消了进程:CancellationToken.WaitHandle.WaitOne()
WaitOne将无限期等待,直到取消为止。
答案 1 :(得分:1)
使用CancellationTokenSource
https://msdn.microsoft.com/ru-ru/library/system.threading.cancellationtokensource%28v=vs.110%29.aspx
只需在按钮点击时调用其方法Cancel()
。