Я использую MessageBox, предоставленный WPF Toolkit. И я получаю ошибкуВызывающий поток должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого WPF
Вызывающий поток должен быть STA, так как многие компоненты пользовательского интерфейса требуют этого
new Thread(new ThreadStart(delegate
{
MessageBox.Show("Opeartion could not be completed. Please try again.","Error",MessageBoxButton.OK,MessageBoxImage.Error);
})).Start();
Как я могу установить ApartmentState в этом случае
Edit: Я пытаюсь для отображения немодального 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();
}
}
Почему вы начинаете новую нить, чтобы показать диалоговое окно? Было бы гораздо лучше сигнализировать о существующем потоке пользовательского интерфейса и показать его. Автоматически решит вашу проблему. – Jon
http://stackoverflow.com/questions/4183622/the-calling-thread-must-be-sta-because-many-ui-components-require-this-in-wpf – Klaus78
@ Я полностью согласен, есть абсолютно нет причины откручивать новый поток, чтобы отображать окно сообщения. Даже если это диалог, который делает что-то, что может заблокировать этот поток, я все равно не предлагаю новый поток - я бы предложил использовать диспетчер. – erodewald