【发布时间】:2016-03-26 11:46:04
【问题描述】:
我在主线程中有一个方法,如果条件是@987654322,我希望从BackgroundWorker 中取消它(无论它是哪一行) @。类似处理。
目前我必须定义一个私有 bool 并在我的方法中的每一行之前检查它。
private bool _cancelIt;
private void myLongRunningMethod()
{
if(_cancelIt) return;
//some code
if(_cancelIt) return;
//some code
if(_cancelIt) return;
//some code
...
}
有没有办法从另一个线程关闭该方法?类似的东西
myLongRunningMethod.Stop();
如果我必须在方法中的每一行之前检查条件,这不是一个好的代码
【问题讨论】:
-
在它自己的线程中运行你的方法,并在你想杀死它时中止线程。除此之外我什么都想不出来。这样做的需要虽然到处都有不好的代码气味。这是什么“长时间运行方法”,为什么需要这样做?
-
@Ryios 我编辑了这个问题。该方法在主线程中。我想通过
BackgroundWorker取消它 -
你不能,你必须中止主线程,这会杀死应用程序。主线程应仅用于 GUI 操作。所有 DoWork 方法都应该在 win forms 应用程序的主线程之外。
-
@Ryios 我不想杀死主线程。这只是我在主线程中调用的一种方法。
-
你想杀死这个方法。唯一的办法就是杀死它正在运行的线程。或者做你已经在做的事情。如果您不能杀死线程,那么可能需要进行重构,以便您可以杀死线程。例如。使该方法在一个线程中单独运行,然后杀死它。