Вы можете сохранить ссылку на поток, а затем прервать поток перед тем, как начинать новый. Как это:
private Thread passwordClearThread = null;
private void getPassword(int lifeInSeconds)
{
int maxLifeBarValue = lifeInSeconds * 10;
if (passwordClearThread != null && passwordClearThread.IsAlive)
{
passwordClearThread.Abort();
passwordClearThread.Join();
}
passwordClearThread = new Thread
(() =>
{
//Initialize the progress bar
Invoke((MethodInvoker)delegate
{
lifeBar.Maximum = maxLifeBarValue;
lifeBar.Value = maxLifeBarValue;
lifeBar.Visible = true;
Clipboard.SetText(pd.getAccountPassword(lstAccounts.Text));
});
//Loop to update the progress bar
for (int x = maxLifeBarValue; x >= 0; x--)
{
Thread.Sleep(100);
Invoke((MethodInvoker)delegate
{
lifeBar.Value = x;
});
}
//Clear the system clipboard
Clipboard.Clear();
//Hide the progress bar when we're done
Invoke((MethodInvoker)delegate
{
lifeBar.Visible = false;
});
});
passwordClearThread.SetApartmentState(ApartmentState.STA);
passwordClearThread.Start();
}
Я думаю, что Вы могли использовать контейнер МОК как Spring для получения этого вида поведения.
Инстанцируйте любой задачи, которая должна только работать однажды как одиночный элемент и иметь конструктора объекта задачи, выполняет задачу. Затем любой объект, который приходит позже с зависимостью от той задачи, получит ссылку на задачу, которая уже работала и смочь получить результаты той задачи или смочь вывести, что та задача была уже выполнена успешно.
В пружинной конфигурации Вы закончили бы со многими задачами, объединенными в цепочку вместе, каждый ссылается на другие задачи в ее конфигурации конструктора. Этот подход является самым гибким, и Вы не ограничиваетесь "задачами" или чем-либо слишком тяжелым в этом отношении.
Я предполагаю, что любая библиотека рабочего процесса также имеет подобные понятия. Но я не действительно знаком с ними.
Я думаю для чего-либо меньшего, люди должны просто прокрутить свой собственный граф объектов и интерфейс с помощью шаблона "посетитель" и возможно Словаря для содержания состояния.
Взгляните на проект Refix на CodePlex. Это расшифровывается как REference FIX и работает очень хорошо.