什么是在一个C#程序中创建一个“取消”事件的最有效方法,该程序正在一个单独的线程上处理一个循环中的大量数据集?有效取消数字处理线程的事件实现?
现在,我只是简单地使用从我的UI线程触发的cancel事件,该事件随后在数字运算线程上调用“onCancel”函数。该取消函数将变量设置为“真”,紧缩回路定期检查该变量,例如,
Class Cruncher {
private bool cancel = false;
public cruncher()
{
crunch();
}
private void crunch()
{
while(conditions AND !cancel) { crunch; }
dispose_resources;
}
private void onCancel()
{
cancel = true;
}
}
虽然我没有检查经常取消变量作为我的榜样以上(而不是实际执行不取消),我还是想优化这个紧缩方法尽可能。任何更有效地完成这个例子的例子都会很好看。
在非常紧密的循环中,我通过仅检查每100或1000次迭代而不是每次迭代来进行优化。但你必须检查。 – 2010-08-05 22:04:31