kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 xaria
xaria
Вопрос

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

Я использую MessageBox, предоставляемый WPF Toolkit. И я получаю ошибку

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

new Thread(new ThreadStart(delegate
{
    MessageBox.Show("Opeartion could not be completed. Please try again.","Error",MessageBoxButton.OK,MessageBoxImage.Error);
})).Start();

Как я могу установить ApartmentState в этом случае

Редактирование: Я пытаюсь отобразить MessageBox без модели, используя элемент MessageBox из WPF Toolkit. Пока что код у меня следующий:

void SomeFunction()
{
// calls to some UI, and processing and then

var th = new Thread(new ThreadStart(delegate
                                        {
                                           MessageBox.Show("Opeartion could not be completed. Please try again.",
                                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                                        }));

                                        th.SetApartmentState(ApartmentState.STA);
                                        th.Start();
                                    }
}
1 2012-05-24T07:27:28+00:00 3
 xaria
xaria
Редактировал вопрос 25-го мая 2012 в 9:46
Программирование
wpf
c#
sta
apartment-state
lasitha edirisooriya
lasitha edirisooriya
24-го мая 2012 в 7:55
2012-05-24T07:55:33+00:00
Дополнительно
Источник
Редактировать
#16266543

Как и рамки пользовательского интерфейса, как и многие Windows Forms, WPF также навязывает однопоточную модель, что означает, что вы можете получить доступ только к указанному производному потоку DispatcherObject, который его создает. В элементах управления Windows Forms, реализующих интерфейс ISynchronizeInvoke, этот интерфейс предоставляет набор методов, таких как Invoke и BeginInvoke, чтобы навязать контракт общей синхронизации потоков, который мы можем использовать для доступа к элементу управления из другого потока. В WPF мы также имеем подобную возможность, но эти операции выполняются в классе под названием Dispatcher, Dispatcher WPF - это способ разрешить подобную модель синхронизации потоков.

Ниже приведен пример того, как изменить свойство TextBox.Text, когда вызывающая сторона находится в другом потоке:

// Resets textbox text from another thread
textBox.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
    textBox.Text = "New text";
}));
 CodingBarfield
CodingBarfield
Редактировал ответ 24-го мая 2012 в 12:20
4
0
Md  Kamruzzaman Sarker
Md Kamruzzaman Sarker
24-го мая 2012 в 7:39
2012-05-24T07:39:40+00:00
Дополнительно
Источник
Редактировать
#16266542

РЕДАКТИРОВАНО

Согласно MSDN В WPF существует встроенный модальный MessageBox, но если вы хотите использовать Modeless MessageBox, то вам придется создать пользовательское окно и затем показать его. Создать, показать и вернуть значение из пользовательского Modeless MessageBox не очень сложно. Вы можете посмотреть эту ссылку

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

  Thread th = new Thread(new ThreadStart(delegate
  {
    MessageBox.Show("Opeartion could not be completed. Please try again.", "Error",MessageBoxButtons.OK,MessageBoxImage.Error);
  }));

  th.ApartmentState = ApartmentState.STA;
  th.Start();
Md  Kamruzzaman Sarker
Md Kamruzzaman Sarker
Редактировал ответ 28-го мая 2012 в 4:14
0
0
Lin  Song Yang
Lin Song Yang
12-го ноября 2015 в 3:43
2015-11-12T03:43:43+00:00
Дополнительно
Источник
Редактировать
#16266544
// enable unit test to mock a dispatcher
var dispatcher = Dispatcher.CurrentDispatcher;
if (Application.Current != null)
{
    // use the application dispatcher if running from the software
    dispatcher = Application.Current.Dispatcher;
}

if (dispatcher != null)
{
    // delegate the operation to UI thread.
    dispatcher.Invoke(
        delegate
        {
            MessageBox.Show("Opeartion could not be completed. Please try again.","Error",MessageBoxButton.OK,MessageBoxImage.Error);
        });
}
 Pyritie
Pyritie
Редактировал ответ 20-го марта 2017 в 9:22
0
0
Похожие сообщества 6
Microsoft Stack Jobs
Microsoft Stack Jobs
2 414 пользователей
Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks
Открыть telegram
С#
С#
2 330 пользователей
Стараемся не флудить. Пишем по делу. Правила: https://t.me/professorweb/430450 Для флуда @svoboda_obsh
Открыть telegram
CODE BLOG / C#
CODE BLOG / C#
1 763 пользователей
Чат для .NET разработчиков и C# программистов. По всем вопросам: @shwanoff Youtube-канал: https://youtube.com/codeblog Основной канал: @codeblog Вконтакте: https://vk.com/codeblog Правила: https://t.me/codeblog_csharp/246972 Вакансии по тегу #work
Открыть telegram
var chat = new Chat();
var chat = new Chat();
1 428 пользователей
Обсуждение вопросов по .NET Правила чата – https://blog.devdigest.today/chat-rules Чат для флуда – https://t.me/+zwxI91RGG6s2YzAy
Открыть telegram
C#/.NET Для Новичков
C#/.NET Для Новичков
293 пользователей
Группа создана для тех, кто изучает язык программирования C#. Верховный главнокомандующий: @BlackDeveloper Оффтоп - разрешен в меру, реклама - бан.
Открыть telegram
ext
ext
31 пользователей
Общение на темы YouTube канала и программирования. Вакансии не размещаем. Основной канал: @extremecode
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 1 день назад
2
Денис Васьков
Зарегистрирован 2 дня назад
3
Dima Patrushev
Зарегистрирован 4 дня назад
4
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
5
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией