kostenloser Webspace werbefrei: lima-city


Thread beenden (C#)

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    beph19

    beph19 hat kostenlosen Webspace.

    Hallo zusammen

    Mein Problem bezieht sich auf C#

    Ich habe einen Thread, der auf eine Verbindung wartet:
    Thread t = new Thread(warten);
    t.start();
    private void warten()
    {
        UdpClient warten = new UdpClient(2051);
        IPEndPoint ep = new IPEndPoint(IPAddress.Broadcast, 2051);
        warten.Receive(ref ep);
    }

    Wenn ich nun die Form schliesse, läuft der Thread weiter. Wie kann ich diesen beenden? (Thread.Abort() habe ich bereits versucht, funktioniert aber leider nicht)

    Gruss
    beph19
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Dazu gibt es sogenannte Daemons. Die laufen immer weiter, bis das Programm beendet wird. Allerdings kenne ich das nur aus Java.
    Verwende einfach t.setDaemon( true ), dann müsste es gehen, habe es so im Netz gefunden.
    http://ondotnet.com/pub/a/dotnet/2001/08/06/csharp.html?page=2

    Beitrag zuletzt geändert: 14.3.2011 18:51:00 von reimann
  4. Autor dieses Themas

    beph19

    beph19 hat kostenlosen Webspace.

    Vielen Dank, das hat mir geholfen.
    Wenn ich isBackground beim Thread auf true ändere, wird dieser beendet, wenn die Form geschlossen wird.
  5. beph19 schrieb:
    Vielen Dank, das hat mir geholfen.
    Wenn ich isBackground beim Thread auf true ändere, wird dieser beendet, wenn die Form geschlossen wird.

    nein, wenn ich mich gerade recht entsinne, hat dies eher mit der Priorität zu tun.
    Einen Thread, der in einer unendlichschleife laufen würde, kann man Alternativ beenden mit static-Variablen. Diese können von allen Threads eingesehen werden. Du könntest z.B. folgendes anlegen:

    public static bool isMainFormOpened = true;

    wenn die Form schließt, legst du ins OnClose-Event einfach:

    isMainFormOpened = false;

    wenn der Thread als Endllosschleife läuft, würde er mit

    while (isMainFormOpened) { ... }

    die Schleife so lange laufen lassen, bis der Wert false auftritt.

    wie UdpClient.Receive jetzt genau arbeitet, ist nicht ganz mein Bereich. setDaemon sagt mir auch nichts. Eventuell gibt es ja nen UdpClient-Event namens OnReceive. Dadrin könntest du dann auch die isMainFormOpened-Variable prüfen und dann den Cancel (oder was auch immer) auslösen, und darauf den Thread verlassen.
    Ganz brutal währe Thread.Kill oder auch Dispose. Das könnte klappen, wobei ich ungerne Dispose anpacke (es killt sogesehen alles ohne Amen).

    Edit: Wenn dein Thread nicht mehrfach ausgeführt wird, könntest du den UdpClient auch static setzen. Dann müsstest du auch innerhalb der Form zugreifen können, und somit die Verbindung kappen.

    Beitrag zuletzt geändert: 25.3.2011 15:22:13 von riku79
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!