从创建它的线程以外的线程访问的跨线程操作

时间:2013-06-28 07:10:23

标签: c# .net multithreading

我已经构建了一个Windows应用程序 我有一个按钮名称提交单击此按钮需要3分钟执行sql命令意味着我需要在窗体上执行其他操作,因为前一个线程应该在后端Process运行。

我怎样才能实现这个场景..

2 个答案:

答案 0 :(得分:2)

使用BackgroundWorker控件,您可以阅读有关MSDN

主题的教程

基本上,在按钮的单击事件中执行:

if(!bw.IsBusy)
    bw.RunWorkerAsync();

这将运行您在后台线程中放入backgroundworker的DoWork事件的任何代码。

代码完成后,它将执行将在主线程上运行的RunWorkerCompleted事件,并且您可以继续更新由于交叉线程而无法更新的内容。

请注意,您可以将参数传递给DoWork事件,并将结果从DoWork传递到RunWorkerCompleted事件。

答案 1 :(得分:2)

解决问题的标题,
请查看this帖子中的以下代码:

public delegate void InvokeDelegate();

private void Invoke_Click(object sender, EventArgs e)
{
   myTextBox.BeginInvoke(new InvokeDelegate(InvokeMethod));
}
public void InvokeMethod()
{
   myTextBox.Text = "Executed the given delegate";
}

使用上面的内容在表单上拥有不同的线程访问UI元素。

对于一些更高级的方法,请查看this SO post