我有一个奇怪的问题。
我有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/