#c# #.net #wpf #windows #multithreading
#c# #.net #wpf #Windows #многопоточность
Вопрос:
Я кодирую приложение C # wpf, и мне нужно заблокировать обработку, чтобы дождаться события. Если я использую поток.Sleep () событие никогда не запускается, пользовательский интерфейс также зависает, поэтому я не знаю, что еще делать.
switch (process.Action)
{
case 1:
this.Goto(process.VarValue);
break;
case 2:
this.Extract(process.VarKey, process.VarValue);
break;
case 3:
this.Validate(new string[] { });
break;
default:
break;
}
Как и в случае «извлечения», он захватывает информацию и отправляет событие в службу, которая открывает другое окно WPF, которое появляется, запрашивая у пользователя ввод.
Пользовательский интерфейс отображается, но кнопка отправки зависает, а затем зависает приложение, я использую unity и eventaggregator, также Magellan для wpf, поэтому проект становится все более и более сложным.
Я пытаюсь использовать более простой метод ожидания потока для пользовательского ввода.
Пожалуйста, сообщите.
- запуск потока => переключить
- при извлечении case => отправляет событие во всплывающую службу, открывается (окно wpf, для ввода пользователем)
- я использую thread.sleep (1000) до тех пор, пока служба не отправит событие ответа
- но приложение зависает при использовании thread.sleep, включая (всплывающее окно).
- Я хочу дождаться пользовательского ввода в основном потоке.
Комментарии:
1. Не уверен, что я понимаю, что выполняется в каком потоке? Не могли бы вы уточнить?
2. Убедитесь, что вы не блокируете поток пользовательского интерфейса.
Ответ №1:
Используйте Window.ShowDialog
, чтобы открыть ваше всплывающее окно. Showdialog вернется только после того, как всплывающее окно снова будет закрыто. Смотрите здесь. Нет необходимости в сложных потоковых сканерах.