c# - 表单的C#形式在单独的线程上

标签 c# .net winforms multithreading c#-4.0

我有一个奇怪的问题。

我有3种形式。
form1,form2,form3。

form1是开始/主要形式。
在form1中,我有代码:

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

form2打开,我不能专注于foorm1,它们都在同一线程上。就是我想要的。

在form2上我有代码:
form3 f3 = new form3;
DialogResult result = f3.ShowDialog();

我运行此代码,然后...
对于某些我来说未知的原因,这个form3在新线程上运行,我可以专注于form2。
我不希望这种情况发生。我不知道为什么这个form3在新线程上运行。我无法使用DialogResult,因为它会导致错误(跨线程)。

它的行为就像我在使用f3.Show(),但我正在使用f3.ShowDialog();一样。

比你提前。

P.S.

如果我用
form3 f3 = new form3;
DialogResult result = f3.ShowDialog(this);

我懂了:

System.InvalidOperationException was unhandled by user code
Message=Cross-thread operation not valid: Control 'form2' accessed from a thread other than the thread it was created on.



在这条线上:
DialogResult result = f3.ShowDialog(this);

最佳答案

对话框通过实现自己的消息循环来发挥作用。由于两个线程都有处理消息的消息循环,因此您启用了两个对话框。手动禁用第一个对话框,或者从同一线程创建并显示所有对话框。 我强烈建议您在一个线程中完成所有UI。 请参阅InvokeRequired和Invoke控件的成员。

关于c# - 表单的C#形式在单独的线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4576623/

相关文章:

c# - 在 C# 中显示和隐藏 div 不起作用

c# - 在代码中获取硬盘上最大的目录大小

c# - 为什么我的 backgroundWorker 不工作?

c# - 从 MVP Winform 客户端使用 WebAPI 的设计模式

c# - 通过索引从 List 获取元素是否线程安全

javascript - ASP 找到包含 0 个元素的下拉列表,但元素就在那里

c# - 在 ComboBox 中绘制图像和文本

.net - WPF:如何使 Canvas 自动调整大小?

c# - 来自 html 文件的 HtmlHelper

c# - 将同一个 Panel 添加到多个 TabPages