Если я использую Monitor.Enter / Exit (через синтаксис c # lock) в приложении WPF, может ли диспетчер вызвать повторный вход?
В приведенном ниже примере предполагается, что OnTextChanged вызывается, когда текст визменяется текстовое поле, может ли вызов _worker.RunWorkerAsync () быть вызван неправильно?
public class SomeClass
{
private object _locker = new object();
private bool _running = false;
private BackgroundWorker _worker;
public void SomeClass()
{
// initialize worker...
}
void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
lock (_locker)
_running = false;
}
void _worker_DoWork(object sender, DoWorkEventArgs e)
{
// ... do something time consuming ...
}
private void OnTextChanged()
{
lock(_locker)
{
if (!_running)
{
_worker.RunWorkerAsync();
_running = true;
}
}
}
}
Я считаю, что это возможно, но я не смог воспроизвести это.WPF каким-то образом препятствует тому, чтобы диспетчер вызывал ожидающие задачи при ожидании на мониторе?