【发布时间】:2010-08-05 18:48:28
【问题描述】:
在 C# 程序中创建“取消”事件的最有效方法是什么,该程序在单独的线程上循环处理大量数据?
目前,我只是使用从我的 UI 线程触发的取消事件,该事件随后在数字处理线程上调用“onCancel”函数。该取消函数将变量设置为“true”,紧缩循环会定期检查该变量,例如
Class Cruncher {
private bool cancel = false;
public cruncher()
{
crunch();
}
private void crunch()
{
while(conditions AND !cancel) { crunch; }
dispose_resources;
}
private void onCancel()
{
cancel = true;
}
}
虽然我没有像上面的示例那样经常检查取消变量(实际上也没有执行 NOT 取消),但我仍然希望尽可能优化这种 crunch 方法。任何可以更有效地完成此操作的示例都会很高兴看到。
【问题讨论】:
-
在非常紧凑的循环中,我通过仅检查每 100 或 1000 次迭代而不是每一次迭代来进行优化。但你必须检查。
标签: c# multithreading events