Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通知另一个线程中的线程停止-引发事件,并将其分类为-C_C#_Wpf_Multithreading - Fatal编程技术网

C# 通知另一个线程中的线程停止-引发事件,并将其分类为-C

C# 通知另一个线程中的线程停止-引发事件,并将其分类为-C,c#,wpf,multithreading,C#,Wpf,Multithreading,简化一下,我有一个WPF应用程序,它有两个类:一个带有GUI的主窗口类和一个对文件进行操作的worker类。在主窗口中,当用户单击按钮时,工作线程启动 我想在主窗口中做一个按钮,它可以停止工作。然而,并没有终止线程,而是通知它,用户已经中止了一个线程,并允许它关闭writer并保存文件 我一直在关注stackoverflow,但所有的问题都与我的问题无关。我想指出的是,我并没有遍历循环等,因此我不能使用标志。我想在线程类的主窗口中引发一个事件。我如何才能做到这一点?使用CancellationT

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

我想在主窗口中做一个按钮,它可以停止工作。然而,并没有终止线程,而是通知它,用户已经中止了一个线程,并允许它关闭writer并保存文件

我一直在关注stackoverflow,但所有的问题都与我的问题无关。我想指出的是,我并没有遍历循环等,因此我不能使用标志。我想在线程类的主窗口中引发一个事件。我如何才能做到这一点?

使用CancellationTokenSource 只需单击按钮调用其方法Cancel。

使用CancellationTokenSource 只需在单击按钮时调用其方法Cancel。

在主窗口类中创建一个。将发送到工作线程。对工作者进行编码以观察令牌。MSDN已经参考了取消模式,请在那里查看

每当需要取消时,通过调用

您不必循环,您可以通过等待令牌:CancellationToken.WaitHandle.WaitOne来观察进程是否被取消

将无限期等待,直到调用Cancel。

在主窗口类中创建。将发送到工作线程。对工作者进行编码以观察令牌。MSDN已经参考了取消模式,请在那里查看

每当需要取消时,通过调用

您不必循环,您可以通过等待令牌:CancellationToken.WaitHandle.WaitOne来观察进程是否被取消


将无限期等待,直到调用Cancel。

您将使用什么数据类型作为工作线程。它是后台工作线程、异步任务还是线程?大多数都有一个取消令牌,但是如果您使用的是原始线程,我建议您切换到后台工作线程,否则您将不得不自己实现这种逻辑。您使用什么数据类型作为工作线程。它是后台工作线程、异步任务还是线程?大多数都有取消令牌,但如果您使用的是原始线程,我建议您切换到后台工作线程,否则您必须自己实现这种逻辑。谢谢您的回答。但我怎样才能通知我的线程,那个另一个线程在并没有签入循环的情况下使用了Cancel方法呢?更新了我的答案,check。您可以使用WaitHandle。注意,线程也可以调用,这通常不需要生成WaitHandle。如果您不想定期检查IsCancellationRequested,您可以拨打比WaitHandle更轻的电话。好的,谢谢。我正在做token.Register=>obj.Cancel;在我的主窗口中,通过cts.Cancel;运行它。在Cancel方法中的线程类中,我关闭了writer。然而,在调用Cancel之后,应用程序返回到写入并抛出异常。我可以阻止它并在取消中终止工作吗?谢谢你的回答。但我怎样才能通知我的线程,那个另一个线程在并没有签入循环的情况下使用了Cancel方法呢?更新了我的答案,check。您可以使用WaitHandle。注意,线程也可以调用,这通常不需要生成WaitHandle。如果您不想定期检查IsCancellationRequested,您可以拨打比WaitHandle更轻的电话。好的,谢谢。我正在做token.Register=>obj.Cancel;在我的主窗口中,通过cts.Cancel;运行它。在Cancel方法中的线程类中,我关闭了writer。然而,在调用Cancel之后,应用程序返回到写入并抛出异常。我可以阻止它并在“取消”中终止作业吗?