通知线程停止 - 在另一个线程和类中引发事件 - C#

时间:2016-05-05 18:38:01

标签: c# wpf multithreading

简化,我有WPF应用程序,它有两个类:一个带GUI的主窗口类和一个工作类,它在一个文件上运行。在主窗口中,当用户单击按钮时,工作线程启动。

我想在主窗口中创建一个按钮来停止工作。然而,没有杀死一个线程,但通知它,该用户已经中止了一个线程并允许它关闭编写器并保存文件。

我在stackoverflow上寻找了很长时间,但所有问题都与我的问题无关。我想指出的是,我没有迭代循环等,因此我不能使用标志。我想在一个线程类的主窗口中引发一个事件。我怎么能这样做?

2 个答案:

答案 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()