Я работаю с функциями ExcelDna и async. Если в коде async: d есть исключение, я хочу показать причудливое окно ошибки WPF. Моя проблема в том, что я получаю сообщение об ошибке «Вызывающий поток должен быть STA, потому что для этого требуется множество компонентов пользовательского интерфейса». Как я могу это решить?ExcelDna: Async: вызывающий поток должен быть STA
[ExcelFunction(Description = "", Category = "")]
public static async Task<object> /*string*/ Foo(CancellationToken ct)
{
try
{
return await Task.Run(async() =>
{
await Task.Delay(1000, ct);
throw new Exception("BOO");
return "HelloWorld";
}, ct2.Token);
}
catch (Exception e)
{
return ShowWpfErrorWindowThatRequiresSTA(e);
}
}
Возможный дубликат [«Вызывающий поток должен быть STA, потому что многие компоненты пользовательского интерфейса требуют эту ошибку при создании всплывающего окна WPF в потоке] (http://stackoverflow.com/questions/2657212/the-calling -thread-must-be-sta-why-many-ui-components-require-this-error) – CSharpie
Вы должны отобразить окно в потоке пользовательского интерфейса. Используйте Application.Current.Dispatcher.BeginInvoke(). –
Возможный дубликат [Вызывающий поток должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого в WPF] (http://stackoverflow.com/questions/4183622/the-calling-thread-must-be-sta-because-many- ui-components-require-this-in-wpf) –