使用Windows窗体来解决问题

时间:2012-02-29 06:58:42

标签: c# multithreading

好吧所以我很难弄清楚如何在继续执行代码之前等待线程完成而不会冻结窗体。

示例代码:

var ct = new System.Threading.Thread(solve);
ct.IsBackground = true;
ct.Name = "Solving";
//start our thread
ct.Start();
ct.Join();
label33.Invoke((MethodInvoker)delegate { label33.Text = "Submitting..."; });
clickPost("name", textBox27.Text);

2 个答案:

答案 0 :(得分:1)

ct.Join()的调用只有一个目的 - 阻止直到有问题的线程完成。

如果您不想阻止,则需要通过其他一些机制(例如事件)处理后台“工作”完成的通知。

使用BackgroundWorker为Windows窗体大大简化了这种操作,它会为您发送通知(在正确的用户界面线程上)。

答案 1 :(得分:0)

如果我理解正确你需要的是为某些异步操作创建回调。 您可以使用委托的BeginInvoke回调参数。请记住委托及其回调将在自己的线程中执行:

Action backgroundAction = new Action(DoAction);
backgroundAction.BeginInvoke(ActionCallback, null);

private void DoAction()
{
    //some background task
}

private void ActionCallback(IAsyncResult result)
{
   //will be executed after
}