Elegant IPB Skin By Skinbox

.NET Base: [FAQ] Warum frieren meine Anwendungen ein? - .NET Base

Zum Inhalt wechseln

Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich

[FAQ] Warum frieren meine Anwendungen ein?

Geschrieben 11. Sep 2009 - 17:54 (#1) Mitglied ist offline   Maximilian 

  • capo dei capi
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 816
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Ein häufiger Grund, warum die Anwendung den Anschein macht sie sei hängengeblieben ist, dass rechenintensive Operationen in dem gleichen Thread ausgeführt werden, wie die Anwendung selbst. Dadurch wird verhindert, dass sich die Anwendung mitsamt allen Controls etc. aktualisieren kann.

Wie kann man das verhindern?
Es gibt zwei Möglichkeiten um dieses Problem zu umgehen:
  • Die Verwendung eines BackgroundWorkers.
  • Den entsprechenden Vorgang selbst in einem neuen Thread starten.


Zu 2.:
Es ist möglich Subroutinen in einem neuen Thread ausführen zu lassen, dabei ist aber folgendes zu beachten:
Seit der .Net Framework-Version 2.0 ist es nicht mehr möglich aus anderen Thread als dem der Anwendung auf Steuerelemente auf der Form zuzugreifen. Wird dies ignoriert wird bei dem Versuch eine Exception geworfen. Eine Lösung des Problems sind sogenannte „Delegates“ die mittels Invoke dem richtigen Thread zugewiesen werden.
Im Anhang befindet sich ein Beispiel zur Verwendung von Thread in Verbindung mit Delegates in C#. Wenn ich Zeit habe füge ich auch ein Beispiel in Visual Basic hinzu.

Fazit
Ich persönlich würde immer zum BackgroundWorker raten, da bei diesem die Handhabung der verschiedenen Threads entsprechend einfacher- und nicht so anfällig für Fehler ist.

Angehängte Datei(en)


Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
0

Geschrieben 07. Dez 2009 - 21:31 (#2) Mitglied ist offline   wsl 

  • Semi-Profi
  • PIPPIPPIPPIPPIP
  • Blog anzeigen
  • Gruppe: Senior Mitglieder
  • Beiträge: 325
  • Registriert: 10. Sep. 09

Man sollte vielleicht noch sagen, dass es auch möglich ist, mit einem Backgroundworker auch auf Controls zuzugreifen. ("Natürlich" mit einem Trick.) Das geht nicht so ganz hervor.


wsl

Dieser Beitrag wurde von wsl bearbeitet: 07. Dez 2009 - 21:34

0

Geschrieben 07. Dez 2009 - 22:01 (#3) Mitglied ist offline   VB-Programer 

  • Semi-Profi
  • PIPPIPPIPPIPPIP
  • Gruppe: Senior Mitglieder
  • Beiträge: 345
  • Registriert: 11. Sep. 09
  • OS: Windows 7 Ultimate
  • IDE: Visual Studio 2008 Pro

Kannst du den Trick mal posten
0

Geschrieben 07. Dez 2009 - 23:32 (#4) Mitglied ist offline   Maximilian 

  • capo dei capi
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 816
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Naja, bei dem Backgoundworker hat man zwei Optionen wie man mit der GUI kommuniziert, entweder wie beim normalen Threading mittels Delegate und Invoke oder ganz bequem über die ReportProgress-Funktion vom Backgroundworker.
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
0

Thema verteilen:


Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich


  • (2 Seiten)
  • +
  • 1
  • 2
  • (2 Seiten)
  • +
  • 1
  • 2

Similar Topics
  Thema Themenstarter Statistik Letzter Beitrag
Neue Antworten Symbol Anwendungen sind das größte Risiko für einen Windows-PC! Simon 
  • 0 Antworten
  • 96 Aufrufe

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0


Enter your sign in name and password


Sign in options
Mit OpenID anmelden   Or sign in with these services