Dans mon application WPF, je fais de la communication asynchrone (avec le serveur). Dans la fonction de rappel, je finis par créer des objets InkPresenter à partir du résultat du serveur. Cela nécessite que le thread en cours soit STA, ce qui apparemment n'est pas le cas actuellement. J'obtiens donc l'exception suivante :
Impossible de créer une instance de 'InkPresenter' définie dans l'assemblage [ ] Le thread appelant doit être STA, car de nombreux composants d'interface utilisateur en ont besoin.
Actuellement, mon appel de fonction asynchrone est comme ceci :
public void SearchForFooAsync(string searchString)
{
var caller = new Func<string, Foo>(_patientProxy.SearchForFoo);
caller.BeginInvoke(searchString, new AsyncCallback(SearchForFooCallbackMethod), null);
}
Comment puis-je faire en sorte que le callback - qui fera la création de InkPresenter - soit STA ? Ou invoquer l'analyse du XamlReader dans un nouveau thread STA.
public void SearchForFooCallbackMethod(IAsyncResult ar)
{
var foo = GetFooFromAsyncResult(ar);
var inkPresenter = XamlReader.Parse(foo.Xaml) as InkPresenter; // <!-- Requires STA
[..]
}
0 votes
Qu'est-il arrivé à
[STAThread]
avant une méthode ? Pas toujours appropriée mais très facile. Peut-être n'est-il pas sorti avant 2011 ? Je ne l'ai pas utilisé depuis 2011 que je me souvienne....0 votes
L'ajout de [STAThread] avant la méthode a fonctionné pour moi. Merci, ebyrob ! :-)