मेरे डब्ल्यूपीएफ एप्लिकेशन में मैं कुछ एसिंक संचार (सर्वर के साथ) करता हूं। कॉलबैक फ़ंक्शन में मैं सर्वर से परिणाम से इंकपेंटर ऑब्जेक्ट्स बना रहा हूं। इसके लिए चलने वाले थ्रेड को एसटीए होना आवश्यक है, जो स्पष्ट रूप से वर्तमान में नहीं है। इसलिए मुझे निम्नलिखित अपवाद मिलता है:एसटीए थ्रेड में कुछ कैसे चलाएं?
असेंबली में परिभाषित 'इंकपेंटर' का उदाहरण नहीं बना सकता [..] कॉलिंग थ्रेड एसटीए होना चाहिए, क्योंकि कई UI घटकों को इसकी आवश्यकता होती है।
वर्तमान में मेरी async समारोह कॉल इस तरह है:
public void SearchForFooAsync(string searchString)
{
var caller = new Func<string, Foo>(_patientProxy.SearchForFoo);
caller.BeginInvoke(searchString, new AsyncCallback(SearchForFooCallbackMethod), null);
}
मैं कॉलबैक कैसे कर सकते हैं - एसटीए हो - जो InkPresenter निर्माण करेंगे? या एक नए एसटीए धागे में XamlReader पार्सिंग का आह्वान करें।
public void SearchForFooCallbackMethod(IAsyncResult ar)
{
var foo = GetFooFromAsyncResult(ar);
var inkPresenter = XamlReader.Parse(foo.Xaml) as InkPresenter; // <!-- Requires STA
[..]
}
जो भी विधि से पहले '[STAThread]' हुआ था? हमेशा उपयुक्त नहीं है लेकिन बहुत आसान है। शायद यह 2011 तक नहीं आया था? मैंने 2011 से इसका उपयोग नहीं किया है कि मुझे याद है ... – ebyrob