Когда в основном потоке вызывается метод AutoResetEvent.WaitOne(), окно теряет фокус и Windows.Deactivate вызывается метод, функция-обработчик выполняется, даже если она вызывается и в основном потоке.
Пример кода проблемы:
Код: Выделить всё
private AutoResetEvent m_autoResetEvent;
public MainWindow()
{
InitializeComponent();
m_autoResetEvent = new AutoResetEvent(false);
}
private void Window_Deactivated(object sender, EventArgs e)
{
}
private void test_Click(object sender, RoutedEventArgs e)
{
Task.Factory.StartNew(() =>
{
Thread.Sleep(1000000);
m_autoResetEvent.Set();
});
m_autoResetEvent.WaitOne();
}
Я думаю, причина может быть чем-то похожа на ту, что описана здесь:
https://learn.microsoft.com/en-us/dotne ... nd-locking
но это относится к блокировке и общим «оконным сообщениям Win32»...
Другое дело, что это происходит только с событиями Windows.Activate и Windows.Deactivate, а не с событиями Windows.Activate и Windows.Deactivate. другие события окна.
Знаете ли вы, имеют ли эти события особый приоритет перед другими и/или существуют ли другие подобные события?
Подробнее здесь: https://stackoverflow.com/questions/792 ... event-arri
Мобильная версия