Я открываю новое подокно основного по нажатию кнопки. После загрузки подокно запускает задачу с отслеживанием положения курсора мыши. При закрытии подокна сигнальной переменной stopMouseTracker присваивается значение true, и бесконечный цикл задачи должен завершиться. Код ниже работает как в режиме отладки, так и в режиме выпуска без оптимизации кода. Но когда я запускаю свой код в Release с включенной оптимизацией кода, подокно зависает после того, как я пытаюсь его закрыть. В чем может быть причина проблемы?
MainWindow:
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
SubWindow subWindow = new();
subWindow.ShowDialog();
}
Подокно:
bool mouseTrackerOn = false;
bool stopMouseTracker = false;
public SubWindow()
{
InitializeComponent();
StartMouseTracker();
}
private void StartMouseTracker()
{
mouseTrackerOn = true;
Task.Factory.StartNew(() =>
{
while (!stopMouseTracker)
{
var p = System.Windows.Forms.Cursor.Position;
// Write cursor coordinates to text box tbXY
tbXY.Dispatcher.BeginInvoke(() => tbXY.Text = $"{p.X} {p.Y}");
Thread.Sleep(1);
}
mouseTrackerOn = false;
});
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
stopMouseTracker = true;
// This blocks the thread completely in Release with code optimization on
while (mouseTrackerOn) ;
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... ization-on