使用另一个线程上的方法/函数打开另一个窗体

本文关键字:另一个 函数 窗体 线程 方法 | 更新日期: 2023-09-27 17:56:18

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

我已经阅读了与此相关的其他线程..但似乎我不知道如何使用调用

这是我打开第二个表格的方式当我打电话给这个..什么都没有发生..(因为它在第 2 个线程上)

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

请帮助我。 我是多线程的新手..

使用另一个线程上的方法/函数打开另一个窗体

你需要在主窗口线程上执行请尝试以下操作:

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

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

它应该在做点什么。这是因为ShowDialog将运行自己的消息循环。TimerMode形式至少应该是可见的和有效的。但是,你是对的,这确实不是最佳实践,特别是如果此表单将与已在主 UI 线程上运行的其他表单交互。

以下是您可以操作的方法。

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

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