【发布时间】:2012-03-15 09:57:28
【问题描述】:
可能重复:
Timing issue - DGV refreshes before process amends the data
我有以下代码
private void btRunReport_Click(object sender, EventArgs e){
Process p = new Process();
p.StartInfo.FileName = @"\\fileserve\department$\ReportScheduler_v3.exe";
p.StartInfo.Arguments = "12";
p.Start();
p.WaitForExit();
InitializeGridView();
}
p 将更新数据库表 X。 InitializeGridView 更新反映表 X 的 DGV。
问题是如果 p 需要 10 分钟来运行,那么 winForm 在它到达 InitializeGridView() 之前就被冻结了。我需要帮助的是如何让表单在一个单独的线程中启动进程,该线程在幕后工作并运行 InitializeGridView()?
【问题讨论】:
-
您不能在这样的线程中启动进程,即从前到后,并且触发线程以启动进程将毫无意义。如果您没有 p.WairForExit 您的代码将继续到 InitializeGridView();马上。
-
简而言之,阅读 C# 4.0 中的Threading in C# - 您尝试做的事情主要是相当容易的。 编辑:错过了您尝试运行 exe 的事实,无论哪种方式,它都是一篇好文章
-
我认为实现这一点并促进安全取消的唯一方法是使用单独的 AppDomain...
-
恕我直言,不是重复,而是后续问题。
-
@till - 同意 - 前一个线程已经结束,这个问题值得单独讨论。虽然我想我可能在上一篇文章的 cmets 中问过这个问题(我会删除它)
标签: c# winforms multithreading