2010-12-13 12 views
4

Kennen Sie C# -Bibliotheken, mit denen Sie eine Reihe von Aktionen ausführen können, z. Jede Aktion wird ausgeführt, wenn die vorherige abgeschlossen ist, oder noch besser, nachdem ein bestimmtes Zeitintervall aufgetreten ist.C# -Bibliotheken für zeitgesteuerte Aktionen

Vielen Dank.

+1

Ich bin nicht ganz sicher, was Sie hier suchen, in Reihenfolge aufgerufen Methoden ohne jede Anstrengung, mehrere Threads aufgerufen wird nacheinander mit der nächsten Methode ausgeführt wird aufgerufen, wenn die letzten Enden. Wenn Sie vordefinierte Pausen zwischen Methoden einfügen möchten, können Sie dies tun, indem Sie den aktuellen Thread für eine bestimmte Anzahl von Sekunden in den Ruhezustand versetzen oder mit einer Exit-Bedingung schleifen, die es erfordert, dass er nach einer bestimmten Zeit aktiv ist. Können Sie erklären, was Sie benötigen? – Robb

+1

IMO ist es ziemlich offensichtlich, was er tun möchte. Es ist sogar eine so häufige Anforderung, dass Microsoft dedizierte Unterstützung dafür über seine .ContinueWith() -Methode für ein Task-Objekt in der Task Parallel Library implementiert hat. –

Antwort

2

Blick auf http://msdn.microsoft.com/en-us/library/dd537609.aspx

Die Task.ContinueWith Methode lassen Sie eine Task gestartet werden angeben, wenn der vorgängigen Aufgabe abgeschlossen ist.

Beispiel

var task = Task.Factory.StartNew(() => GetFileData()) 
             .ContinueWith((x) => Analyze(x.Result)) 
             .ContinueWith((y) => Summarize(y.Result)); 
+1

sollten Sie erwähnen, dass "Task" nur in .net 4 –

+0

true ist, aber wenn in der Frage nicht anders angegeben, sollte es sicher sein, den Code anzunehmen, um auf der neuesten .Net-Version laufen zu können. –

+0

Ja, 'Task' ist genau das, wonach ich gesucht habe, danke. – ocodo

2

für Timing versuchen quartz.net. Zum Synchronisieren von Aktionen verwenden Sie z. Veranstaltungen, waithandles, Monitor.Wait() und Monitor.Pulse() ...

sonst hat man eine Reihe von Aktionen verarbeiten kann, zB

var methods = new List<Func> 
{ 
    FooMethod1, 
    FooMethod2 
} 
foreach (var method in methods) 
{ 
    method.Invoke(); 
} 

aber das macht nur Sinn, wenn Sie nicht über eine Moderator-Methode (sequentielle Verarbeitung) haben oder Ihre Methoden sollten nicht voneinander wissen.