У меня есть приложение WPF. Главное окно этого приложения имеет кнопку. Я открываю модальное диалоговое окно WinForms в отдельной теме, когда нажимается эта кнопка. Проблема, с которой я столкнулся, заключается в том, что диалог не ведет себя как модальный, т. Е. Все еще можно переключить фокус на главное окно, в то время как мне требуется разрешить фокусировку на только что открывшемся диалоге, и не должно быть возможности выбора основного окно.
Примечание: я не могу переместить modalDialog.ShowDialog();
за пределы делегата, потому что диалоговая форма создает элементы управления динамически, и это означает, что эти элементы управления должны оставаться в потоке, в котором они были созданы. Чтобы быть более понятным, если я переместу modalDialog.ShowDialog();
наружу, я получу исключение, например, так:
Операция между потоками не разрешена: элемент управления 'DynamicList' доступен из потока, отличного от того, в котором он был создан.
Есть идеи, как заставить форму вести себя как модал?
Вот код:
private void button1_Click(object sender, RoutedEventArgs e)
{
DoSomeAsyncWork();
}
private void DoSomeAsyncWork()
{
var modalDialog = new TestForm();
var backgroundThread = new Thread((
delegate()
{
// Call intensive method that creates dynamic controls
modalDialog.DoSomeLongWaitingCall();
modalDialog.ShowDialog();
}
));
backgroundThread.Start();
}