2017-11-22 10 views
0

スレッドやタスクを使用してC#で新しいフォームを開くにはどうすればよいですか?C#新しいスレッドまたはタスクでフォームを開く?

例:

public void openform() 
{ 
    Form _form = new Form(); 
    _form.show() 
} 

Thread _thread = new Thread(openform); 
_thread.start(); 

私はスレッドを使用している場合、それは、フォームを開き、再びそれを閉じます。

+0

なぜあなたは別のtheadでフォームを開きたいですか? UIスレッドで十分ではありませんか? – rene

+2

複数のUIスレッドを作成する必要はありません。それはあなたに多くの問題を引き起こすでしょう。 1つのUIスレッドが必要です。 – Servy

+0

新しいフォームを開くには時間がかかりますか? – mikelegg

答えて

0

あなたあなたは、単にSTAからApartmentStateを設定し、別のメッセージループ開始した場合別のUIスレッドを作成することができます。

Thread _thread = new Thread(() => 
{ 
    Application.Run(new Form()); 
}); 
_thread.SetApartmentState(ApartmentState.STA); 
_thread.Start(); 

注意あなたが上で作成するコントロールを表示することができwont'tこのフォームのメインスレッド。そのため、複数のUIスレッドを作成することは一般的には悪い考えです。行って、あなたのユースケースコールDispacther.InvokeShutdown();に基づいて

-1
Thread thd = new Thread(() => 
      { 

       //Do Some stuff 
       //Do some more stuff 

       var dispatcher = Dispatcher.CurrentDispatcher; 
       dispatcher.UnhandledException += Dispatcher_UnhandledException; //you exception handling logic 
       Dispatcher.Run(); 
      }); 
      thd.IsBackground = true; 
      thd.SetApartmentState(ApartmentState.STA); 
      thd.Start(); 

関連する問題