У меня есть приложение-приложение, которое регулярно выполняет импорт/экспорт каждые X минут.Как получить уведомление о завершении ThreadPool?
части импорта требует времени (например, 60 секунд) и избежать замораживания моего полного приложения (у меня есть лог-экран внутри, чтобы увидеть, что происходит), я реализовал Threading моего Worker:
/// <summary>
/// Eigentlicher JobTimer Tick, schmeißt den Worker jeden Tick neu an.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void JobTimer_Tick(object sender, EventArgs e)
{
WriteLog("Jobtimer Tick");
JobTimer.Enabled = false;
ThreadPool.QueueUserWorkItem(StartWorker);
}
/// <summary>
/// StartWorker Wrapper for Threading
/// </summary>
/// <param name="state"></param>
private void StartWorker(object state)
{
Worker w = new Worker();
w.StartWork(); //<--- Jobs will be Done here
JobTimer.Enabled = true; //<---Problem here
}
Моей проблемы is, я должен отключить JobTimer (который отметит каждые 1000 мс, чтобы увидеть, есть ли задание todo), поэтому JobTimer не переполняется заданиями, которые в настоящее время работают. Но я не могу включить его снова, потому что кажется, что JobTimer в поточном методе не совпадает с методом вызова ...
Итак, как я могу получить уведомление, когда мой Async ThreadPool закончен?
Обычный способ вы можете сообщить одну нить о том, что происходит в другом потоке - использовать конструкцию сигнализации. Конечно, сейчас это пустая трата времени. Почему бы не использовать 'BackgroundWorker' или' Task' (особенно с 'await') вместо этого? – Luaan