En mi aplicación WPF hago algunas comunicaciones asíncronas (con servidor). En la función de devolución de llamada, termino creando objetos InkPresenter a partir del resultado del servidor. Esto requiere que el hilo en ejecución sea STA, que al parecer actualmente no lo es. Por lo tanto, recibo la siguiente excepción:¿Cómo ejecutar algo en el hilo STA?
No se puede crear una instancia de 'InkPresenter' definida en el ensamblaje [..] El hilo que llama debe ser STA, porque muchos componentes de la interfaz de usuario lo requieren.
Actualmente mi asíncrono llamada a la función es la siguiente:
public void SearchForFooAsync(string searchString)
{
var caller = new Func<string, Foo>(_patientProxy.SearchForFoo);
caller.BeginInvoke(searchString, new AsyncCallback(SearchForFooCallbackMethod), null);
}
¿Cómo puedo hacer la devolución de llamada - que hará la creación InkPresenter - STA ser? O invoque el análisis XamlReader en un nuevo hilo STA.
public void SearchForFooCallbackMethod(IAsyncResult ar)
{
var foo = GetFooFromAsyncResult(ar);
var inkPresenter = XamlReader.Parse(foo.Xaml) as InkPresenter; // <!-- Requires STA
[..]
}
¿Qué pasó con '[STATread]' antes de un método? No siempre es apropiado, pero es muy fácil. Tal vez no salió hasta 2011? No lo he usado desde 2011 que recuerdo ... – ebyrob