スレッドやタスクを使用してC#で新しいフォームを開くにはどうすればよいですか?C#新しいスレッドまたはタスクでフォームを開く?
例:
public void openform()
{
Form _form = new Form();
_form.show()
}
Thread _thread = new Thread(openform);
_thread.start();
私はスレッドを使用している場合、それは、フォームを開き、再びそれを閉じます。
スレッドやタスクを使用してC#で新しいフォームを開くにはどうすればよいですか?C#新しいスレッドまたはタスクでフォームを開く?
例:
public void openform()
{
Form _form = new Form();
_form.show()
}
Thread _thread = new Thread(openform);
_thread.start();
私はスレッドを使用している場合、それは、フォームを開き、再びそれを閉じます。
あなたあなたは、単にSTA
からApartmentState
を設定し、別のメッセージループ開始した場合別のUIスレッドを作成することができます。
Thread _thread = new Thread(() =>
{
Application.Run(new Form());
});
_thread.SetApartmentState(ApartmentState.STA);
_thread.Start();
注意あなたが上で作成するコントロールを表示することができwont'tこのフォームのメインスレッド。そのため、複数のUIスレッドを作成することは一般的には悪い考えです。行って、あなたのユースケースコールDispacther.InvokeShutdown();
に基づいて
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();
。
なぜあなたは別のtheadでフォームを開きたいですか? UIスレッドで十分ではありませんか? – rene
複数のUIスレッドを作成する必要はありません。それはあなたに多くの問題を引き起こすでしょう。 1つのUIスレッドが必要です。 – Servy
新しいフォームを開くには時間がかかりますか? – mikelegg