在我的WPF应用程序中,我进行一些异步通信(与服务器)。在回调函数中,我需要从服务器结果创建InkPresenter对象。这需要运行线程是STA,而当前线程显然不是STA。因此,我会收到以下异常:
无法创建程序集中定义的“InkPresenter”的实例[..],因为许多UI组件需要调用线程为STA。
目前,我的异步函数调用如下:
public void SearchForFooAsync(string searchString)
{
var caller = new Func<string, Foo>(_patientProxy.SearchForFoo);
caller.BeginInvoke(searchString, new AsyncCallback(SearchForFooCallbackMethod), null);
}
我该如何让回调函数 - 用于创建 InkPresenter - 成为STA? 或在新的STA线程中调用XamlReader解析。
public void SearchForFooCallbackMethod(IAsyncResult ar)
{
var foo = GetFooFromAsyncResult(ar);
var inkPresenter = XamlReader.Parse(foo.Xaml) as InkPresenter; // <!-- Requires STA
[..]
}
[STAThread]
到底怎么了?虽然不总是适用,但非常简单。也许直到2011年才出现?我好像自2011年以来就没有再使用过它了... - ebyrob