调用完成后返回的线程

时间:2013-11-23 07:51:19

标签: c# multithreading

我需要从winform app调用一个单独的线程并等待它,只要它的工作完成而没有锁定UI,例如:

// ButtonClick event handler
Thread t = new Thread(OnThread);
t.Start();
MessageBox.Show("Complete");

voin OnThread()
{
    // some long running work here..
}

因此,当OnThread函数返回时,消息框应该出现。 想法?

2 个答案:

答案 0 :(得分:2)

你可以和代表一起玩。

var threadStart = new ThreadStart(OnThread);
threadStart+= OnThreadEnds;//<--Combine multicast delegate
Thread t = new Thread(threadStart);
t.Start();

void OnThread()
{
    // some long running work here..
}

voin OnThreadEnds()
{
    // Here pass the control to UI thread and show message box
    //MessageBox.Show("Complete");
}

答案 1 :(得分:0)

这个问题有很多适用的解决方案。您选择的解决方案将取决于代码的语义含义和目标框架版本。

在我们的对话中,最适用的解决方案是在OnMethod方法完成后引发事件,然后在事件处理程序中编写延续代码,如下所示

private void buttonSomething_Click(object sender, EventArgs eventArgs)
{
    OnMethodCompleted += (s, e) =>
    {
        MessageBox.Show("...");
    };
    Thread thread = new Thread(OnMethod);
    thread.Start();
}

private void OnMethod()
{
    // Some long running operation here..
    OnMethodCompleted(this, EventArgs.Empty);
}

private static event EventHandler OnMethodCompleted = delegate { };