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

locomarco

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


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
 

toeffi

Lt. Junior Grade
Dabei seit
Feb. 2010
Beiträge
474
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 ;)
 

Timmey92

Commodore
Dabei seit
Okt. 2008
Beiträge
4.517
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.
 

locomarco

Commander
Ersteller dieses Themas
Dabei seit
Aug. 2009
Beiträge
2.445
Habs jetzt in nem zweiten Timer und es funktioniert. Danke euch :)

Warum kam der Fehler denn aber nicht beim Debuggen?
 

Mike Lowrey

Commodore
Dabei seit
Juni 2005
Beiträge
4.978
Weil du nicht so viele Ticks ausgeführt hast? ;)
 

locomarco

Commander
Ersteller dieses Themas
Dabei seit
Aug. 2009
Beiträge
2.445
Ich meinte wenn ich es in VS kompiliere und starte, so das es unter vshost.exe läuft.
 
Top