私はそれにいくつかのボタンがあるメインフォームでこのアプリを持っている。ボタンはMainForm UIでの作業を含む時間のかかる作業を行います。このアプリケーションの複数のインスタンスを同時に実行する必要があるので、私はMainFormHostを作成することにしました。各タブの下にあるMainFormのインスタンスを作成してそこにホストするタブコントロールを持つフォームです。そして、これまでのところすべてが大丈夫でした。問題はMAinForm1上のボタンをクリックするとうまく始まりますが、MainForm2のボタンをクリックすると、MainForm1ボタンのプロセスがMainForm2プロセスの後ろにキューイングされます。その後、タブコントロール/キューイングのアプリケーションの複数のインスタンスをホスト
MainForm GetMainFrom(TabPage tabPage)
{
tabPage.Invoke(new Action(() =>
{
mainForm = new MainForm();
mainForm.TopLevel = false;
mainForm.FormBorderStyle = FormBorderStyle.None;
mainForm.Dock = DockStyle.Fill;
_mainForms.Add(mainForm);
tabPage.Controls.Add(mainForm);
mainForm.Show();
}));
}
そしてメソッドを呼び出す:
var mainFormThread = new Thread(() =>
{
mainForm = GetMainFrom(tabPage);
});
mainFormThread.SetApartmentState(ApartmentState.STA);
mainFormThread.Start();
を、仕事のあまりになるだろうので、私は、彼らがUIで作業するときに、物事を起動するためのMainForm内のコードを変更することはできませんが、私は簡単に一言で言えば
TIA
は、あなたの完全な説明をいただき、ありがとうございます。しかし、私はちょっとあなたが説明したことのほとんどを知っていたが、私の質問には、私のコードにこのような変更を加えることをやりかける方法/ショートカットがあるかどうかが問題でした。たとえば、複数のUIスレッドを作成したり、アプリの2つのインスタンスを実行してお互いをブロックすることなく正常に動作したときの動作方法を探しています。私は多くのウィンドウを開いて、インスタンスをタブコントロールの下で管理したいと思っていません。 – Alireza
複数のプロセス(基本的に複数のアプリケーションを実行している)以外は、いいえ、存在しません。あなたは根本的な設計上の問題は残念です。 「訂正する」最も簡単な方法は、タスクフレームワークを使用することです。 – adudley