警告が必要なときに、スレッド内のwebBrowserコントロール(メインスレッドではない)を持つ小さなポップアップフォームを開きたい。C#スレッド内にwebBrowserを持つフォームを作成する
ちょうど、スレッドのポップアップフォームを実行し、エラー
ActiveX control '8856f961-340a-11d0-a96b-00c04fd705a2' cannot be
instantiated
because the current thread is not in a single-threaded apartment.
だから、私はSTAモードでスレッドを設定しました、エラーは発生しません。しかし、複数のポップアップを実行する必要がある場合は、1つずつ表示されます。 2番目のポップアップは、最初のポップアップを閉じるまで表示されません。そうですね。 私はすべてのポップアップをスレッドで同時に表示したいと思います。
private void timer1_Tick(object sender, EventArgs e)
{
Thread th = new Thread(() =>
{
var arts = _Moniter.Mon();
if (arts.Count < 1) return;
foreach (var art in arts)
{
var f = new FormPopup(art, FormPopup.POPUP_MODE.NORMAL, Color.Yellow, 30000);
Application.Run(f);
}
});
th.SetApartmentState(ApartmentState.STA); //
th.IsBackground = true; //
th.Start();
}
なしSTAスレッドでWebBrowserを持つフォームを表示する方法はありますか? または、STAスレッドで複数のフォームを同時に実行するにはどうすればよいですか?
なぜ別のスレッドで実行しますか? 'f.Show();'で 'Applicatio.Run(f);'を置き換えて複数のフォームを同時に表示するのはなぜですか? –
@PeterBons "f.Show();"を実行すると、すべてのポップアップフォームが表示された直後に閉じられます。だから、私はApplication.Run()を使用しました。私はちょうどモニターが働いている間、固まっていないUIをしたい。このジョブにはWeb解析の問題が含まれているためです。 – amplet7