我已经构建了一个 Windows 应用程序,其中我有一个按钮名称提交单击此按钮执行 sql 命令需要 3 分钟,这意味着我需要在表单上执行其他操作,因为前一个线程应该在后端进程中运行。
我怎样才能实现这个场景..
我已经构建了一个 Windows 应用程序,其中我有一个按钮名称提交单击此按钮执行 sql 命令需要 3 分钟,这意味着我需要在表单上执行其他操作,因为前一个线程应该在后端进程中运行。
我怎样才能实现这个场景..
使用BackgroundWorker控件,可以阅读MSDN上的主题教程
基本上,在按钮的单击事件中执行:
if(!bw.IsBusy)
bw.RunWorkerAsync();
这将在后台线程上运行您放入 backgroundworker 的 DoWork 事件的任何代码。
代码完成后,它将执行 RunWorkerCompleted 事件,该事件将在主线程上运行,您可以在此处继续更新由于跨线程而无法更新的内容。
请注意,您可以将参数传递给 DoWork 事件,并将 DoWork 的结果传递给 RunWorkerCompleted 事件。
解决您的问题的标题,请查看此帖子
中的以下代码:
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 帖子。