主线程上的SynchronizationContext.Current为null

时间:2017-07-12 09:47:25

标签: c# wpf multithreading winforms synchronizationcontext

主线程上

SynchronizationContext.Current为空,我很难搞清楚这个。

static class Program
{
        /// <summary>
        /// The main entry point for the application.
        /// </summary>

        [STAThread]
        static void Main(string[] args)
        {
            var ctx = System.Threading.SynchronizationContext.Current;
            // ctx is null here
        }
}

我在.NET 4.6.1上运行。它是一个混合的Winforms和WPF应用程序。入门点是WinForms。以下是此类证据的截图:

enter image description here enter image description here

它与this之类的帖子无关,因为我使用的是较新的.NET版本,而且似乎提到的问题已经修补了。还有其他好主意吗?

1 个答案:

答案 0 :(得分:3)

当您的应用程序的入口点(SynchronizationContext)被点击时,当然没有Main可用。您需要等待框架初始化它。

在Windows窗体应用程序中,这会在创建第一个窗体时发生。因此,只有在调用Application.Run方法之后,SynchronizationContext.Current属性才会实际返回同步上下文。