【发布时间】:2015-01-07 01:59:46
【问题描述】:
我有这种情况:
表单“菜单”,您可以在其中单击“新建”,然后会出现一个插入表单(带有 showdialog)。如果您插入数据,我会在数据库上进行 INSERT 查询并关闭此表单。 在 showDialog() 语句之后,我有很多方法以顺序方式执行大量操作(非常重要),有时还会更新 dataGridView。 在所有这些计算之后,我模拟按下“新按钮”以允许用户插入新项目。 这是一个例子:
private void buttonNew_Click(object sender, EventArgs e)
{
DialogResult dr = new DialogResult();
InsertForm form = new InsertForm();
dr = form.ShowDialog();
if (dr == System.Windows.Forms.DialogResult.OK)
{
Method1();
Method2();
if (dataGrid2.RowCount > 0)
{
Method3();
Method4();
Method5();
Method6();
Method7();
Method8();
}
bNew.PerformClick();
}
}
问题是“新”表单 (bNew.PerfomClick()) 会在 2-3 秒后出现,我等不及了。所以我尝试创建一个包含 Method1 到 Method8 的方法,在新线程中运行它并执行 bNew.PerfomClick(),但这不起作用,因为我的很多方法都更新了 datagridView。
有没有办法解决这个问题? 对不起我的英语不好。
------------更新------
现在我正在尝试这段代码:
delegate string OperazioniDelegate();
private string Operazioni()
{
if (!InvokeRequired)
{
Method1();
Method2();
............
}
else
Invoke(new OperazioniDelegate(Operazioni));
return "";
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Operazioni();
}
这样,新的插入表单会立即显示,但他的 UI 会被阻塞,直到 backgroundWorker 结束工作..
【问题讨论】:
-
你好,问题是我不仅需要更新UI,还需要在另一个线程中执行很多操作并NEXT更新ui..
标签: c# multithreading user-interface datagridview