Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SubForm in neuen Thread auslagern
Rico913
myCSharp.de - Member



Dabei seit:
Beiträge: 85

Themenstarter:

SubForm in neuen Thread auslagern

beantworten | zitieren | melden

Hi,

ich habe ein Programm (Main_Form) und ein entsprechendes SubForm. In diesem Form lade ich eine dynamische Excel-Tabelle in ein DataGrid, welches ich nach bestimmten Anforderungen im Main_Form filtere.
Nun ist es so, dass es je größer die Tabelle ist, es spürbar länger dauert, bis ich im Main-Form eine Aktion ausführen kann.

Ist es möglich, das ganze SubForm in eine Art Backgroundworker o.ä. auszulagern? Und wenn ja, wie ist das Stichwort dafür? Können dabei Main_Form und SubForm "kommunizieren"?

Danke und viele Grüße
Rico
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Nein. UI Elemente wie Forms, Controls, Windows.. müssen im Hauptthread laufen.
Das Laden von Daten kann / sollte ausgelagert werden.

[FAQ] Warum blockiert mein GUI?
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 3984

beantworten | zitieren | melden

Hallo,

alle Interaktionen mit der UI müssen zwingend im Main-Thread (UI-Thread) ausgeführt werden, nur Berechnungen können ausgelagert werden, s.a. [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke).

Und in [FAQ] Warum blockiert mein GUI? stehen noch weitere Möglichkeiten.
private Nachricht | Beiträge des Benutzers
jogibear9988
myCSharp.de - Member



Dabei seit:
Beiträge: 585
Herkunft: Offenau

beantworten | zitieren | melden

Es geht schon auch multiThreading mit mehreren Prozessen... macht ja z.b. Visual Studio so mit dem XamlDesigner.

Es gab dazu auch mal ein Beispiel auf Codeproject: Baktun Shell: Hosting WPF Child Windows in Another Process
cSharp Projekte : https://github.com/jogibear9988
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

jogibear9988, das sind Äpfel und Birnen.
Er spricht von Multi Thread UI, was in WinForms - siehe Blick in die Doku - by Design eine schlechte Idee ist.
Der Grund des Wunsches sind in 99,999% Designfehler der Anwendung; hört sich hier ja auch so an.

Dein Link zeigt ein Multi Prozess Konstrukt, was etwas anderes ist und neben Vorteilen (Isolierung, wie sie zB. Browser aus Sicherheitsgründen brauchen / wollen) auch extreme Nachteile hat.
Für Visual Studio bietet sich dieses Konstrukt auch an; für "normale" Anwendungen, die keine IDE darstellen, externe Plugis brauchen, keine Sicherheits-Prozess Isolierungsfeatures des Betriebssystem - eher selten. Dafür hast Du aber einen ungemein riesen Overhead, dass die Prozesse untereinander kommunizieren können.

Hier haben wir eine Anwendung, die nicht reagiert, weil das Laden im UI Thread stattfindet.
Dafür das gesamte Applikationskonstrukt umzubauen: puh, wer will ;-)
private Nachricht | Beiträge des Benutzers