我有一个耗时的功能,我想给用户一个机会,当他注意到它需要太长时间时,通过单击 UI 中的一个按钮来停止它。我怎样才能做到这一点?
问问题
1004 次
5 回答
3
您可以使用BackgroundWorker类在其他线程上运行时间和资源消耗的东西,并使用它的CancelAsync方法来请求(它不是立即执行)取消其他线程。
有关如何实现该功能的具体示例,可以查看此问题中接受的答案:
于 2012-08-27T18:06:38.490 回答
1
首先,您需要在与主线程分开的线程中运行耗时的函数。否则 UI 将停止响应。
然后,您需要有一个静态变量或一个共享实例,其中 UI 可以设置一个标志,指示该耗时功能应该停止。
最后,耗时函数应该定期检查标志,如果设置了就停止处理。
BackgroundWorker类实现了这种模式并解决了一些其他需求(例如线程间通信和进度报告)。
于 2012-08-27T18:07:33.243 回答
1
假设您的耗时方法称为MyTimeConsumingMethod
.
void MyTimeConsumingMethod()
{
//Do stuff
}
全局放置一个线程:
Thread t;
放入您的 Form_Load()
t = new Thread(new ThreadStart(MyTimeConsumingMethod));
t.Start();
并按下按钮:
t.Abort();
于 2012-08-27T18:09:13.773 回答
0
于 2012-08-27T18:07:37.317 回答
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;
}
于 2012-08-27T18:06:29.837 回答