2017-07-12 9 views
2

SynchronizationContext.Currentはメインスレッドではnullです。このスレッドを作成するのは苦労します。SynchronizationContext.Currentはメインスレッドでnullです

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

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

私は.NET 4.6.1で動作しています。これは、WinFormsとWPFの混合アプリケーションです。エントリポイントはWinFormsです。ここでは、そのような証拠のいくつかのスクリーンショットは、以下のとおりです。

enter image description here enter image description here

私は新しい.NETバージョンを使用して言及した問題がすでにパッチが適用されたようでいてまたthisのような記事とは関係ありません。他の良いアイデア?

+1

SynchronizationContext.Current nullは正確にどこにありますか?質問をするときに問題のレポを提供してください:https://stackoverflow.com/help/mcve – mm8

+0

https://stackoverflow.com/questions/1709552/why-is-synchronizationcontext-current-null-in-my- winforms-application –

+0

@ mm8 - 更新されました。 VladimirArustamian - これは私には当てはまりません。私は元の記事の最後の段落でそれを述べました。 –

答えて

4

もちろん、アプリケーションのエントリポイント(Main)にヒットした場合に利用できるSynchronizationContextはありません。フレームワークが初期化するのを待つ必要があります。

Windowsフォームアプリケーションでは、これは最初のフォームが作成されたときに発生します。したがって、Application.Runメソッドが呼び出された後にのみ、SynchronizationContext.Currentプロパティは実際に同期コンテキストを返します。

+0

それは本当に真実です。私の場合は、マルチウィンドウワークスペースなので正式なアプリケーションはありませんので、最初のフォームを初期化してコンテキストを強制的に作成する必要があります。 –

関連する問題