Использование диспетчера при создании собственного окна сообщения, однако не может прочитать возвращаемое значение

1

WPF - С#

У меня довольно большая проблема. Я разработал специальный почтовый ящик, который отлично работает и работает на обычных потоках. Однако в фоновом потоке он вызывает ошибку, заявляя, что ее нужно вызывать потоком STA. Чтобы решить эту проблему, вы можете отправить все это. Но это само по себе вызывает проблему, потому что если пользователь нажимает "да", и вы загружаете файл или что-то делаете, он замерзнет или повесит пользовательский интерфейс. :

Dispatcher.Invoke(new Action(() => 
{
if (msgbox.ShowBox("Do you like bacon?", "Question") == "1")
msgbox.ShowBox("Yes");
else
msgbox.ShowBox("No");
}));

Чтобы обойти это, я попробовал следующее:

if ((string)Dispatcher.Invoke(new Action(() => { msgbox.ShowBox("Update", "An update has been found, would you like to update now?"); })) == "1")

Однако проблема заключается в том, что с диспетчером в том случае, если stat не может получить ответ из окна сообщения, и это приводит к тому, что код не думает, что нет щелчка, или отмена была нажата каждый раз.

Я пытался найти способ изменить поток сообщений в поток STA на нем, но не смотрю. Я всегда получаю, что это должно быть вызвано из потока STA для некоторых элементов пользовательского интерфейса на этом бите кода.

public msgbox()
{
   InitializeComponent();
}

Если у вас возникнет проблема с моей головной болью, я был бы благодарен. Его раздражает, так как ему приходится каждый раз обманывать каждый раз, когда я хочу создать mesagebox. Последнее, что я скопировал код моего сообщения из моих проектов WFA, и этот проект является моим первым правильным WPF. В WFA почтовые ящики работали в фоновом работнике без проблем и не требовали вызова или чего-либо еще.

Я также не хочу определять строковый ответ; каждый раз, когда это тоже беспорядочно:

string response = "nothing";
if ((string)Dispatcher.Invoke(new Action(() => { response = msgbox.ShowBox("Update", "An update has been found, would you like to update now?"); })) == "1")

EDIT: Я думаю, что нашел решение.

Теги:
multithreading
if-statement
wpf
dispatcher

1 ответ

0

Использовал поток посредника для создания ящиков сообщений и заставил их работать в потоке пользовательского интерфейса.

  • 0
    -1, приведите пример кода, чтобы помочь с проблемой, а не просто рекомендацию в одну строку. Поработайте над своим ответом, и вы получите +1.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню