[FIXED] So entfernen Sie Threads automatisch aus der Liste der Threads in c#

Ausgabe

Wie aus dem Titel

hervorgeht, möchte ich Threads automatisch aus der Thread-Liste entfernen, wenn Thread-Jobs erledigt sind.


wie:

Thread thr;
if(thr.done)
{
    threadlist.remove(thr);
}

Lösung

Sie können überprüfen, ob der Thread mit IsAlive beendet ist, und diese Funktion in einem Timer aufrufen:

var _timer = new Timer();
_timer.Interval = 30*1000; // specify interval time as you want
_timer.Tick += new EventHandler(timer_Tick);

void timer_Tick(object sender, EventArgs e)
{
   foreach (var thr in threadList)
   {
       if (!thr.IsAlive)
       {
            threadlist.Remove(thr);
       }
   }
}
_timer.Start();

Eine bessere Lösung besteht darin, einen try-finally-Block im Thread zu verwenden, um festzustellen, wann die Verarbeitung abgeschlossen ist. siehe dieses Beispiel:

private static int lastThreadID=0;  //We assign an ID to each thread
protected static object _lock = new object();
var thread = new Thread((tID) =>
{
    try
    {
       work();
    }
    finally
    {
       removeThread((int)tID );
    }
});
lock (_lock)
{
    threadlist.Add(Tuple.Create(++lastThreadID, thread));
}

thread.Start(lastThreadID);

Action work = () =>
{
   for (int i = 0; i < 20; i++)
       Thread.Sleep(1000);
};


private static void removeThread(int tID)
{
   lock (_lock)
    {
      threadlist.RemoveAll((x) => x.Item1 == tID);
    }
}


Beantwortet von –
hossein sabziani


Antwort geprüft von –
Senaida (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like