Вы можете помещать задачи в потоки, когда хотите, чтобы они выполнялись:
public abstract class MyTask {
public abstract void DoWork();
}
// ...
public void SomeTaskStarter()
{
MyTask task = SomeFactoryMethodToCreateATaskInstance();
new Thread(new ThreadStart(task.DoWork)).Start();
}
MyTask - это абстрактный класс, который представляет задачу для выполнения, и он определяет метод DoWork (), который будет делать то, что вы хотите. SomeFactoryMethodToCreateATaskInstance () создаст конкретный экземпляр задачи, и все, что вам нужно сделать, это написать DoWork (), чтобы сделать то, что вам нужно сделать:
public class Twitterer : MyTask
{
private string _tweet;
public Twitterer(string tweet)
{
_tweet = tweet;
}
public override DoWork()
{
TwitterApi api = new TwitterApi(); // whatever
api.PostTweet(tweet);
}
}
Вы наверняка захотите какое-то действие по завершению задачи. Что бы вы ни делали, подпрограмма завершения задачи должна быть поточно-ориентированной и, вероятно, должна вызываться через BeginInvoke () / EndInvoke (), если вам нужно выполнить какую-либо работу с пользовательским интерфейсом.
SomeTaskStarter () лучше всего вызывать из службы Windows и, скорее всего, будет содержать аргумент с информацией о том, какую задачу следует запустить и т. Д.