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
GUI "not respondig" ... lässt sich aber wiederbeleben
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 448

Themenstarter:

GUI "not respondig" ... lässt sich aber wiederbeleben

beantworten | zitieren | melden

Hallo,
die GUI meiner Anwendung (Windows 7, 32 bit, C#, -NET 4.5.1) klemmt von Zeit zu Zeit und geht in den Zustand "not responding". Dieser Zustand lässt sich beenden, indem man mit der rechten Maustaste auf irgendein Symbol in der Taskleiste klickt und dann die Maus in das sich öffnende Popup bewegt, ohne einen Click auszuführen.

Der Effekt tritt nur auf manchen SingleCore Prozessoren auf, bei MultiCore Prozessoren nie.

Es sieht aus, als würde der Windows Scheduler den Prozess ignorieren und bräuchte nur einen Anstoß ... höchst mysteriös.

Hat einer ne Idee?

Danke
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
MrMango
myCSharp.de - Member

Avatar #avatar-3276.png


Dabei seit:
Beiträge: 25
Herkunft: Hannover

beantworten | zitieren | melden

Das kommt mir irgendwie bekannt vor. Hatte vor langer Zeit mal etwas Ähnliches. Da fror allerdings sogar der Mauszeiger kurzzeitig ein. Da lag es am Grafiktreiber. Vielleicht kannst Du mal eine andere Version des Grafiktreibers ausprobieren. Ggf. eine ältere; neuer ist nicht immer besser...

Gruß
Mango
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

könnte mir auch vorstellen, dasses was mit unabgesichertem Threading zu tun hat - da soll allerlei komisches Verhalten entstehen können - bis hin zu Deadlocks.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 448

Themenstarter:

beantworten | zitieren | melden

Danke Euch beiden.

Grafiktreiber ist so ne Sache. Der Computer ist ein Kunden PC und darf daher nicht manipuliert werden. Mal sehen, was ich da ausrichten kann.

Unabgesichertes Threading klingt interessant. Aber wie kann man das verhindern? Ich erzeuge keinerlei Threads explizit, alle entstehenden Threads kommen vom Framework und werden dynamisch zur Laufzeit angelegt. Was könnte ich da tun? Gibt es entsprechende Projektoptionen?

Was mich am meisten verwundert, ist die Art und Weise, wie man die Anwendung wieder reanimieren kann. Und das klappt zuverlässig.

Danke
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

dann scheidet das wohl aus.
also wenn du gar nix mit Threads machst, kannste da auch wohl nix falsch gemacht haben.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 448

Themenstarter:

beantworten | zitieren | melden

Nee, ich selbst erzeuge keine Threads, aber im Taskmanager sehe ich, dass in der Anwendung regelmäßig 15-20 Threads laufen. Ich selbst arbeite komplett asynchron über Eventhandler (GUI-Aktionen des Bedieners, Callback-Handler während des Ladens eines XML Dokuments, Timer-Events und Events vom Server). An einer Stelle verwende ich einen Backgroundwoker, aber soweit komme ich leider gar nicht, das Phänomen tritt eher auf.

Danke
Christel
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

Zitat
Callback-Handler während des Ladens eines XML Dokuments, Timer-Events und Events vom Server). An einer Stelle verwende ich einen Backgroundwoker
naja - das sind ja doch Threading-Aktionen.
Wenn du dabei unabgesichert ins Gui grabschst, dann entstehen die genannten instabilen Zustände.
Allerdings kann man normalerweise kaum unabgesichert ins Gui grabschen, es sei denn, man hat die "Sicherung rausgedreht" mit:

Control.CheckForIllegalCrossThreadCalls=False;
Diese Zeile ist gewissermassen der "Random-Suicide", weil man weiß dann nie, ob, wo und wanns knallt, stillesteht oder sonstwas für Überraschungen verbricht.

Mach mal Volltextsuche auf "CheckForIllegalCrossThreadCalls".
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von ErfinderDesRades am .
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 448

Themenstarter:

beantworten | zitieren | melden

Ja klar, ich wollte damit nur sagen, dass ich selbst keine Threads über new Thread() erzeuge.

Nee, mit der Property CheckForIllegalCrossThreadCalls mache ich nix, habe den Code durchsucht. Wenn ich die Online-Hilfe richtig verstehe, wird diese Property sowieso nur im DEBUG-Modus aktiv und hilft, CrossThread-Zugriffe besser debuggen zu können.

In meinen Eventhandlern achte ich zudem auf die Verwendung von Invoke, falls notwendig.
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers
xxxprod
myCSharp.de - Experte

Avatar #avatar-2329.gif


Dabei seit:
Beiträge: 1.378
Herkunft: Österreich\Wien

beantworten | zitieren | melden

Hallo Christel,

- kommt der Freeze immer zur selben Zeit/bei der selben Aktion?
- kannst du das Verhalten beim Debuggen auch nachvollziehen?
- wenn die App gerade eingefroren ist, sieht man dann im TaskManager ungewöhnliche CPU-Last und/oder Festplattennutzung?

Lg, XXX
private Nachricht | Beiträge des Benutzers
Christel
myCSharp.de - Member



Dabei seit:
Beiträge: 448

Themenstarter:

beantworten | zitieren | melden

Nein, der Freeze kommt nicht reproduzierbar, aber immer bei programmtechnisch ähnlichen Aktionen.

Hm, Debuggen ist gerade nicht, da Kunden PC und es wäre eine Heidenarbeit, dort alle Quellen und das VisualStudio draufzuspielen. Wenn es sich gar nicht vermeiden läßt, muss ich RemoteDebugging ins Auge fassen.

Nein, die CPU ist nicht außergewöhnlich belastet, der Taskmanager zeigt keine Außergewöhnlichkeiten.

ABER ...

... ich habe jetzt ein Control in der Applikation ausgemacht, das biestig zu sein scheint. Nachdem ich es temporär ausgeschlossen habe, läuft alles recht stabil. Ich werde an der Stelle weitersuchen und wenn ich die Ursache gefunden haben sollte, meinen Sourcecode nach ähnlichen Schwachstellen durchsuchen.

Ich werde berichten.

Danke soweit
Christel
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Christel am .
Es ist schlimm, eine Ausnahme zu sein, aber noch schlimmer, keine zu sein.
private Nachricht | Beiträge des Benutzers