Dan*_*lba 8 .net c# multithreading invoke winforms
我正在工作线程中执行代码.有时,我需要显示一个对话框或一条消息.
我一直在玩代码,只是Invoke
在我传递IWin32Window
给对话框时似乎是严格必要的.否则工作正常.
我的问题是两个:
Invoke
?提前致谢
Han*_*ant 11
这是Winforms中的一个小错误.它包含Handle属性getter中的诊断代码,用于验证该属性是否与创建句柄的线程使用在同一个线程中.虽然对诊断线程错误非常有帮助,但这并不总是合适的.一个这样的情况是,Windows实际上并不要求窗口的父级由同一个线程拥有.
您可以通过调整SetParent()或暂时禁用使用Control.CheckForIllegalCrossThreadCalls进行检查来解决此问题.或者通过使用Control.Invoke(),最好的方法.难道不是不指定所有者解决它.由于缺少另一个窗口,对话框的所有者是桌面窗口.它与其他以桌面为所有者的窗口没有Z顺序关系.这将使对话框偶尔消失在另一个窗口后面,完全不被用户发现.
但是有一个更大的问题,在线程上显示对话框是一个讨厌的可用性问题.在她使用您的程序时将窗口推入用户的脸部是一个全面的坏主意.没有人知道当她忙着点击和打字时会发生什么.她偶然关闭对话框甚至没有看到它是一个真正的危险.不要这样做.
归档时间: |
|
查看次数: |
8417 次 |
最近记录: |