Mat*_*ith 8 c# multithreading winforms
使用Winforms,如果我在一个不是"主要"ui线程的线程上,我可以安全地使用
看起来我会遵守以下规则:必须在创建它们的线程上修改Winforms控件.
从我已经完成的一些阅读中看来,ShowDialog似乎会创建自己的消息泵,这样我就不必担心在已经有消息泵的线程上创建Form.
问题的背景是我得到一个回调,我想显示一些Winforms UI,但我没有访问任何其他可以用来调用主线程的UI.
这大致是正确的,尽管调用线程的SetApartmentState()方法将线程切换到STA非常重要.对于许多UI操作很重要,包括剪贴板,拖放和shell对话框.当你在线程上创建的表单不在前台并隐藏在另一个窗口后面时,你通常会遇到一个糟糕的Z顺序问题.或有实际的坏习惯都在前台当移动用户不希望它抢点击鼠标或意外击键.
这些都是难以解决的问题,它们会让你的应用变得片状.没有充分的理由没有引用调用,你也可以通过某种方式将它传递给类.如果真的有必要的话,你总是让Application.OpenForms [0]重新开始.
归档时间: |
|
查看次数: |
2164 次 |
最近记录: |