使用Winforms,
如果我所在的线程不是“主”ui 线程,我可以安全地进行操作吗?
- 创建一个表格,
- 在该表单上调用 ShowDialog
看来我会遵守以下规则:
Winforms 控件必须在创建它们的线程上进行修改。
从我完成的一些阅读来看,ShowDialog 似乎将创建自己的消息泵,这样我就不需要担心在已经具有消息泵的线程上创建表单。
问题的背景是我收到一个回调,我想在其中显示一些 Winforms UI,但我无权访问可用于调用主线程的任何其他 UI。
这大致是正确的,尽管调用线程的 SetApartmentState() 方法将线程切换到 STA 非常重要。对于许多 UI 操作很重要,包括剪贴板、拖放和 shell 对话框。当您在线程上创建的表单不在前台并隐藏在另一个窗口后面时,通常会遇到糟糕的 Z 顺序问题。或者实际上有令人讨厌的习惯do当用户不期望时在前台移动并意外地单击鼠标或击键。
这些都是很难解决的问题,它们确实会让你的应用程序不稳定。没有充分的理由不引用调用,您也可以通过某种方式将其传递给类。如果确实有必要,您总是可以依靠 Application.OpenForms[0] 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)