【发布时间】:2014-02-13 21:48:29
【问题描述】:
我有一个导出数据的方法。我通过一个新线程执行此操作,以便 GUI 保持响应。最后它会打开一个SaveFileDialog,如果没有调用它就无法工作。通过以下修改,它可以正常工作,但 GUI 再次没有响应。有什么线索吗?
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(method);
thread.Start();
}
public void medhod()
{
if (this.InvokeRequired)
{
Invoke(new MethodInvoker(delegate() { method(); }));
}
else
{
//Code
//SaveFileDialog
}
}
*编辑:另一种方法是将导出代码留在新线程中,并将SaveFileDialog 放回原始线程。我只需要第一个线程“暂停”,然后在第二个线程结束后继续。欢迎提出想法。
【问题讨论】:
-
非 UI 线程和模式对话框不能很好地协同工作...
-
对于大多数任务来说,直接使用线程实际上已经过时了。就使用
Task设施而言,建议的技术是TPL (msdn.microsoft.com/en-us/library/dd537609%28v=vs.110%29.aspx)。尽管就像@James 说的那样,它并不能解决您的问题 -
我通过一个新线程执行此操作,以便 GUI 保持响应我在任何地方都看不到!你只是在 UI 线程中做所有事情。
-
这也是一个 GUI 线程吗?无论如何如何解决这个问题?
-
不要为整个操作执行调用,仅用于保存对话框。也就是说,像往常一样进行处理,并且仅在最后执行 Invoke 以创建对话框并执行您需要的任何操作。
标签: c# multithreading