我有耗时的功能,我想让用户有机会通过点击UI中的按钮,当他注意到它需要太长时间时停止它。我怎么能这样做?
答案 0 :(得分:3)
您可以使用BackgroundWorker类在其他线程上运行时间和资源消耗的东西,并使用其CancelAsync方法来请求(它的不是立即执行)取消另一个线程。
关于如何实现它的具体示例,可以看看这个问题中接受的答案:
答案 1 :(得分:1)
首先,您需要在与主线程分开的线程中运行耗时的函数。否则UI将停止响应。
然后你需要一个静态变量或一个共享实例,其中UI可以设置一个标志,指示耗时的函数应该停止。
最后,耗时的功能应定期检查标志并停止处理(如果已设置)。
BackgroundWorker类实现了这种模式,并解决了其他一些要求(例如线程间通信和进度报告)。
答案 2 :(得分:1)
让我们说你耗时的方法被称为MyTimeConsumingMethod
。
void MyTimeConsumingMethod()
{
//Do stuff
}
全局放置一个帖子:
Thread t;
放入Form_Load()
t = new Thread(new ThreadStart(MyTimeConsumingMethod));
t.Start();
按下按钮:
t.Abort();
答案 3 :(得分:0)
这是一个例子
bool _cancel = false;
private void count()
{
_cancel = false;
new System.Threading.Thread(delegate()
{
for (int i = 0; i < 100000; i++)
{
if (_cancel)
break;
Console.WriteLine(i);
}
}).Start();
}
private void button1_Click(object sender, EventArgs e)
{
_cancel = true;
}
答案 4 :(得分:0)