如何从外面结束执行方法?

时间:2012-08-27 18:01:05

标签: c#

我有耗时的功能,我想让用户有机会通过点击UI中的按钮,当他注意到它需要太长时间时停止它。我怎么能这样做?

5 个答案:

答案 0 :(得分:3)

您可以使用BackgroundWorker类在其他线程上运行时间和资源消耗的东西,并使用其CancelAsync方法来请求(它的不是立即执行)取消另一个线程。

关于如何实现它的具体示例,可以看看这个问题中接受的答案:

How to wait for a BackgroundWorker to cancel?

答案 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)

尝试在后台工作器上运行它。

This提供了一个如何使用它的好例子。

然后你可以打电话

Worker.CancelAsync(); 

当用户想要取消操作时