我已经构建了一个Windows应用程序 我有一个按钮名称提交单击此按钮需要3分钟执行sql命令意味着我需要在窗体上执行其他操作,因为前一个线程应该在后端Process运行。
我怎样才能实现这个场景..
答案 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。