-3

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

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

4

2 回答 2

2

使用BackgroundWorker控件,可以阅读MSDN上的主题教程

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

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

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

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

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

于 2013-06-28T07:58:45.100 回答
2

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

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 元素。

有关对此的一些更高级方法的集合,请查看此 SO 帖子

于 2013-06-28T08:13:35.223 回答