考虑一下这个WinForms程序:
Module Main
Dim notifyicon As New System.Windows.Forms.NotifyIcon
'Dim dummycontrol As New System.Windows.Forms.Control
Public Sub Main()
If (System.Threading.SynchronizationContext.Current Is Nothing) Then
MessageBox.Show("Nothing")
Else
MessageBox.Show("Something")
End If
End Sub
End ModuleNotifyIcon是一个WinForm控件,需要一个消息循环,那么为什么声明dummycontrol (或任何WinForms控件)会设置SynchronizationContext,但是NotifyIcon不设置SynchronizationContext呢?
发布于 2015-04-30 11:55:31
您可以从Reference中发现这一点,同步提供程序是由WindowsFormsSynchronizationContext.InstallIfNeeded()方法安装的。请查看这些引用,以查看何时调用:
NotifyIcon来自组件,而不是控件,所以永远不要击中这3颗子弹中的一颗。它是NotifyIcon() winapi函数的一个薄包装器。我想您可以将其构造函数不调用InstallIfNeeded()称为bug,但这有点牵强,您必须始终调用Application.Run()才能使其正常工作,因此您将始终命中第一个项目。小心初始化顺序。
https://stackoverflow.com/questions/29965262
复制相似问题