首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么NotifyIcon不设置SynchronizationContext?

为什么NotifyIcon不设置SynchronizationContext?
EN

Stack Overflow用户
提问于 2015-04-30 10:25:55
回答 1查看 169关注 0票数 2

考虑一下这个WinForms程序:

代码语言:javascript
复制
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 Module

NotifyIcon是一个WinForm控件,需要一个消息循环,那么为什么声明dummycontrol (或任何WinForms控件)会设置SynchronizationContext,但是NotifyIcon不设置SynchronizationContext呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-30 11:55:31

您可以从Reference中发现这一点,同步提供程序是由WindowsFormsSynchronizationContext.InstallIfNeeded()方法安装的。请查看这些引用,以查看何时调用:

  • Application.Run()
  • 控件类构造函数
  • 分发开始/调用()调用的助手方法(不会发生)。

NotifyIcon来自组件,而不是控件,所以永远不要击中这3颗子弹中的一颗。它是NotifyIcon() winapi函数的一个薄包装器。我想您可以将其构造函数不调用InstallIfNeeded()称为bug,但这有点牵强,您必须始终调用Application.Run()才能使其正常工作,因此您将始终命中第一个项目。小心初始化顺序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29965262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档