So habe ich diese App mit einem MainForm, die ein paar Tasten darauf hat. und die Schaltflächen würden zeitaufwendige Aufgaben erledigen, die die Arbeit mit der MainForm-Benutzeroberfläche einschließen. Da wir manchmal mehrere Instanzen dieser App gleichzeitig ausführen müssen, entschied ich mich, einen MainFormHost zu erstellen, wo es ein Formular mit einem Tab-Steuerelement ist, das unter jedem Tab eine Instanz von meinem MainForm erstellt und dort hostet. Und bisher war alles in Ordnung. Das Problem ist, wenn ich auf eine Schaltfläche auf MAinForm1 klicke, funktioniert es gut, aber sobald ich auf eine Schaltfläche auf MainForm2 klicke, wird der Prozess der MainForm1-Schaltfläche hinter dem MainForm2-Prozess in die Warteschlange gestellt.Hosten mehrerer Instanz der App in einem Tabcontrol/Warteschlange
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();
}));
}
Und dann rufen Sie die Methode:
var mainFormThread = new Thread(() =>
{
mainForm = GetMainFrom(tabPage);
});
mainFormThread.SetApartmentState(ApartmentState.STA);
mainFormThread.Start();
Ich kann den Code innerhalb der Mainform ändern sich die Dinge aufzurufen, wenn sie mit der Benutzeroberfläche arbeiten wollen, weil es zu viel Arbeit sein wird, aber ich kann einfach jeden Knopf klicken macht aus einem Thread/oder Aufgabe ...
TIA
Vielen Dank für Ihre ausführliche Erklärung.Allerdings wusste ich das meiste von dem, was du erklärt hast, aber meine Frage war, ob es einen Weg/eine Abkürzung für mich gibt, diese Art von Änderungen an meinem Code nicht vorzunehmen. Sie suchen beispielsweise nach dem Erstellen mehrerer UI-Threads oder nach dem Ausführen von zwei Instanzen meiner App. Sie funktionieren problemlos, ohne sich gegenseitig zu blockieren. Ich möchte nicht viele Fenster geöffnet haben und lieber die Instanzen unter einem Tab-Steuerelement verwaltet werden. – Alireza
Abgesehen von mehreren Prozessen (im Grunde mehrere Kopien Ihrer Anwendung ausgeführt) dann nein, gibt es nicht. Sie haben ein grundlegendes Designproblem. Der einfachste Weg, dies zu korrigieren, wäre das Task-Framework. – adudley