C# OutOfMemoryException wenn Programm nicht unter vshost.exe läuft.

locomarco

Commander
Registriert
Aug. 2009
Beiträge
2.446
Hi,
hab mir in WPF ein Programm geschrieben, das in der rechten-unteren Bildschirmecke Notifications (wie zb. von Steam oder MSN) anzeigt.

unbenanntjhcm.png

In nem Timer hab ich diesen Code stehen:
Code:
                if (directionIsUp)
                {
                    if (this.Top > workAreaSize.Height - this.Height)
                    {
                        this.Top -= 1;
                    }
                    else
                    {
                        //wait();
                        [COLOR="Red"][B]Thread waitThread = new Thread(new ThreadStart(this.wait));[/B][/COLOR]
                        waitThread.Start();
                    }
                }
Code:
void wait()
        {
            System.Threading.Thread.Sleep(4000);
            directionIsUp = false;
        }

Das wait() ist dafür, das die Notification 4 Sekunden lang oben bleibt, ich denke das ist ersichtlich.
Damit ich mehrere Notifications anzeigen lassen kann, rufe ich das wait() in nem anderen Thread auf, ansonsten reagiert mein MainWindow ja nicht mehr.

Wenn ich mein Programm in VS debugge, läuft alles wunderbar ohne Fehler.
Starte ich das Programm aber einfach so, gibts ab der zweiten Notification folgenden Fehler:

Code:
System.OutOfMemoryException: Eine Ausnahme vom Typ "System.OutOfMemoryException" wurde ausgelöst.
   bei System.Threading.Thread.StartInternal(IPrincipal principal, StackCrawlMark& stackMark)
   bei System.Threading.Thread.Start(StackCrawlMark& stackMark)
   bei System.Threading.Thread.Start()
   bei WpfApplication1.Window1.dt1_Tick(Object sender, EventArgs e) in Window1.xaml.cs:Zeile 60.

Zeile 60 ist die Rot markierte.

Ich hoffe ihr könnt mir da weiterhelfen.

Grüße
 
Ach herje, ich sehs. Du startest ja bei jedem Tick einen neuen Thread. Da ist natürlich klar das du irgendwann keinen Speicher mehr hast ;)
 
Wieso benutzt du Threading? Benutz doch einen zweiten Timer, den kannst du ja nach belieben starten/stoppen. UI Aktionen können ruhig im UI-Thread bleiben ;)
Hab mir den Code nicht sehr genau angesehen, finde Threading hier aber das falsche Mittel.
 
Habs jetzt in nem zweiten Timer und es funktioniert. Danke euch :)

Warum kam der Fehler denn aber nicht beim Debuggen?
 
Weil du nicht so viele Ticks ausgeführt hast? ;)
 
Ich meinte wenn ich es in VS kompiliere und starte, so das es unter vshost.exe läuft.
 
Zurück
Oben