唤醒线程退出的最佳方法?C#

唤醒线程退出的最佳方法?C#,c#,.net,multithreading,sleep,C#,.net,Multithreading,Sleep,我生成了一个线程(只有一个)来做一些工作,它基本上不会访问tread之外的任何数据,除了调用callback()来查看用户是否想要退出(还将状态报告发送回主线程以在GUI中显示) 当关闭关闭exe时,我想唤醒线程并让它退出,这样做的最佳方式是什么?回调已经说明了用户是否要退出,所以现在的问题是使用Thread.Sleep并提前唤醒它,这样它就可以退出,而不是让进程再运行几秒钟或几分钟。此功能有助于stop更快地退出。使用或将线程的属性设置为true,则不会使应用程序保持打开状态 我会推荐Back

我生成了一个线程(只有一个)来做一些工作,它基本上不会访问tread之外的任何数据,除了调用callback()来查看用户是否想要退出(还将状态报告发送回主线程以在GUI中显示)

当关闭关闭exe时,我想唤醒线程并让它退出,这样做的最佳方式是什么?回调已经说明了用户是否要退出,所以现在的问题是使用Thread.Sleep并提前唤醒它,这样它就可以退出,而不是让进程再运行几秒钟或几分钟。此功能有助于stop更快地退出。

使用或将线程的属性设置为true,则不会使应用程序保持打开状态

我会推荐BackgroundWorker,但后者是一个快速解决方案

更新

发帖后,原发帖人改变了要求(见附于此问题的评论)。最新答复如下:

如果要停止后台操作而不结束应用程序,请参阅后台工作人员的方法。另外,不要使用Thread.Sleep-使用a并调用您需要等待的内容。

使用a或将您的线程属性设置为true,那么它将无法保持您的应用程序处于打开状态

我会推荐BackgroundWorker,但后者是一个快速解决方案

更新

发帖后,原发帖人改变了要求(见附于此问题的评论)。最新答复如下:


如果要停止后台操作而不结束应用程序,请参阅后台工作人员的方法。另外,不要使用Thread.Sleep-使用和调用您需要等待的内容。

另一种方法如下:


在程序中设置一个
ManualResetEvent
,并在希望线程结束和关闭时调用
Set
。不要在工作线程上调用
Thread.Sleep
,而是调用
event.WaitOne
并传入
TimeSpan
对象。如果事件发出信号,您的工作线程将在超时发生之前唤醒-
WaitOne
将返回
true

另一种方法如下:


在程序中设置一个
ManualResetEvent
,并在希望线程结束和关闭时调用
Set
。不要在工作线程上调用
Thread.Sleep
,而是调用
event.WaitOne
并传入
TimeSpan
对象。如果事件发出信号,您的工作线程将在超时发生之前唤醒-
WaitOne
将返回
true

我必须同意Mark。关于您的问题,唯一清楚的是您需要重新检查线程策略。 你说你有一根线在工作,但你说你想唤醒它

线程正在等待工作吗?如果是这样,则以更短的周期睡眠,并更频繁地检查退出或使用重置事件。唤醒线程的最好方法是不要让它睡觉。做你必须做的,然后退出。在开始任何长时间运行的操作之前,始终检查中断信号,无论以何种形式实现它们,如果必须睡眠线程,请在短周期内再次执行


线程正忙,您想中断它吗?如果您无法对其进行检测,使其能够及时响应中断信号,您可能别无选择,只能将其杀死。

我必须同意Mark的观点。关于您的问题,唯一清楚的是您需要重新检查线程策略。 你说你有一根线在工作,但你说你想唤醒它

线程正在等待工作吗?如果是这样,则以更短的周期睡眠,并更频繁地检查退出或使用重置事件。唤醒线程的最好方法是不要让它睡觉。做你必须做的,然后退出。在开始任何长时间运行的操作之前,始终检查中断信号,无论以何种形式实现它们,如果必须睡眠线程,请在短周期内再次执行


线程正忙,您想中断它吗?如果您无法对其进行检测,使其能够及时响应中断信号,则您可能别无选择,只能将其杀死。

我来看看它,如何让它从睡眠中醒来-编辑-我想我可以使用它来不阻止终止,但我想在用户单击停止时唤醒它。我想我不会麻烦了吧?(试图杀死线程似乎很糟糕)您不需要对后台线程执行任何操作。除非在应用程序退出之前,您的线程需要进行一些特定的清理,否则您可以关闭应用程序,让线程死掉。后台线程无法使应用程序保持打开状态。我更关心的是允许用户在不等待我的评论的情况下提前停止应用程序并启动其他命令。我不明白。。。如果您更关心的是在不关闭应用程序的情况下停止线程,那么为什么不在问题中提出这个问题呢?如果需要在应用程序终止以外的时间停止线程,则需要使用不同的解决方案。也许你应该更新你的问题来说明这一点,因为你当前的问题没有反映你的要求。我来看看,我如何告诉它从睡眠中醒来-编辑-我想我可以使用它来不阻止终止,但我想在用户单击停止时唤醒它。我想我不会麻烦了吧?(试图杀死线程似乎很糟糕)您不需要对后台线程执行任何操作。除非在应用程序退出之前,您的线程需要进行一些特定的清理,否则您可以关闭应用程序,让线程死掉。后台线程无法使应用程序保持打开状态。我更关心的是允许用户在不等待我的评论的情况下提前停止应用程序并启动其他命令。我不明白。。。如果你更关心阻止threa