![]() |
1
9
我怀疑InvokedRrevoked可能在骗你。WinForm控件会推迟创建控件的底层Win32 HWND,直到方法调用真正需要它。如果HWND尚未创建,则InvokeRequired将返回false。 有关详细说明,请参阅: "Mysterious Hang or The Great Deception of InvokeRequired" 如果您的后台线程查询InvokeRequired 之前 UI线程导致控件延迟创建其HWND,InvokeRequired将(错误地)告诉您的后台线程它不需要使用Invoke()将控件传递回UI线程。当后台线程访问控件时,BAM! “InvalidOperationException:跨线程操作无效!” UI线程可以手动强制控件为其创建HWND句柄。InvokeRequired将知道UI线程是控件的所有者:
|
![]() |
2
5
大多数人看到这个错误后都会看到一件事,“你没有从主UI线程访问这个控件。”实际上,如果你愿意,你可以有100个UI线程(这个行为没有定义,但受支持)。panelMain很可能是在与(this)不同的线程上创建的;我看不到代码,但看起来你是在worker/线程中创建它的。 要确认该行为,请尝试以下操作:
为不同的错误做好准备(与父线程不同的线程上的子控件,不确定会出现什么错误,但我非常确定会出现)。这不是一个解决方案。 然而,工厂会解决这个问题:
编辑:panelMain可能不是线程的“违规者”,正如我所说,来自不同线程的养育控制会导致高度未定义的行为。确保所有控件都是在主窗体线程的上下文中创建的。 |
![]() |
3
0
没有不可能的跨线程错误! |
![]() |
4
0
我希望这对你有用。 我想你的gui东西在一个线程上。只需初始化此单例,并在您想调用Control时依赖它。调用必需属性。 干杯, -格雷格
} |
![]() |
5
-1
使用
|