使用另一个线程上的方法/函数打开另一个表单?

时间:2011-05-11 04:09:09

标签: c# multithreading

当方法/或函数打开第二个表单时,是否可以打开我的第二个表单 在另一个线程?

我已阅读与此相关的其他主题.. 但似乎我无法弄清楚如何使用调用

这是我如何打开第二张表格 当我打电话给这个..没有什么事情发生..(因为它在第二个线程上)

TimerMode f2 = new TimerMode();
f2.ShowDialog();

请帮帮我。我新手多线程..

2 个答案:

答案 0 :(得分:2)

您需要在主窗口线程上执行 请尝试以下方法:

this.Invoke((MethodInvoker)delegate{
    TimerMode f2 = new TimerMode();
    f2.ShowDialog();
}

这将在正确的线程上创建它。

答案 1 :(得分:0)

应该做点什么。那是因为ShowDialog将运行自己的消息循环。 TimerMode表单至少应该是可见的并且正常运行。但是,你是对的,这真的不是最好的做法,特别是如果这个表单将与已经在主UI线程上运行的其他表单进行交互。

以下是您可能会这样做的方式。

anotherForm.Invoke(
  (MethodInvoker)(() =>
  {
    new TimerMode().ShowDialog();
  }));

请注意,anotherForm是对已在主UI线程上托管的其他表单之一的引用。