मेरे पास एक विकल्प विंडो और एक विंडो है जो इन विकल्पों और किनेक्ट डेटा के आधार पर रंग प्रदर्शित करती है। अब तक सब कुछ एक धागे पर है (जहां तक मुझे पता है; मैंने कोई थ्रेडिंग नहीं किया है)।मैं एक नए धागे पर एक विंडो कैसे खोलूं?
अब, मैं एक दर्शक विंडो खोलने के लिए एक विकल्प जोड़ रहा हूं जिसे सबसे कम संभव विलंबता के साथ अद्यतन करने की आवश्यकता होगी। सभी इस जरूरत पर जोर देता एक खिड़की को बनाने और उसे दिखा रहा है:
viewer = new SkeletalViewer.MainWindow();
viewer.Show();
जब इस घटना की आग, रंग खिड़की रंगों को प्रदर्शित करने बंद हो जाता है (यानी घटना मुख्य थ्रेड पर 30 बार एक दूसरे आग कि फायरिंग बंद हो जाता है), लेकिन दर्शक पूरी तरह से प्रदर्शित किया जाता है। मैं चाहता हूं कि दर्शक और रंगीन विंडो दोनों को अपडेट किया जाए।
अन्य प्रश्न पढ़ने से, ऐसा लगता है कि दर्शक को नए थ्रेड पर दर्शक बनाना है। हालांकि, मुझे इसके साथ कई समस्याएं आ रही हैं।
यह आग जब मैं दर्शक खोलने के लिए बटन पर क्लिक करें:
private void launchViewerThread_Click(object sender, RoutedEventArgs e)
{
Thread viewerThread = new Thread(delegate()
{
viewer = new SkeletalViewer.MainWindow();
viewer.Dispatcher.Invoke(new Action(delegate()
{
viewer.Show();
}));
});
viewerThread.SetApartmentState(ApartmentState.STA); // needs to be STA or throws exception
viewerThread.Start();
}
अगर मैं viewer.Show() या आह्वान (फोन की परवाह किए बिना) यह रूप में ऊपर, लाइन एक अपवाद फेंकता है: नहीं कर सकते एक निर्भरता ऑब्जेक्ट का उपयोग करें जो उसके माता-पिता फ्रीज़ेबल की तुलना में एक अलग धागे से संबंधित है। यहां बताया गया है कि मैं Invoke() को कैसे समझता हूं: यह दर्शक के प्रेषक तक पहुंचता है, जो जानता है कि वस्तु किस धागे पर चल रही है, और उसके बाद उस थ्रेड से विधियों को कॉल कर सकते हैं।
क्या मुझे इस दर्शक को नए धागे पर रखने की कोशिश करनी चाहिए? क्या समस्या भी धागे का सवाल है? उपयोगकर्ता दर्शक के साथ बातचीत नहीं करेगा।
कोई भी जानता है कि यह क्यों काम नहीं करता है? सहायता के लिए धन्यवाद।
मुझे यह कहते हुए आमंत्रण दिखाई देता है कि दर्शक() को शो() पर कॉल किया जा रहा है । यहां तक कि दर्शक के आस-पास आमंत्रण() के बिना भी। दिखाएं(), मुझे अभी भी फ्रीज करने योग्य अपवाद मिलता है। –
@ michael.greenwald फिर 'SkeletalViewer.MainWindow()' में कुछ है जो अपवाद पैदा कर रहा है। मैंने एक खाली WPF प्रोजेक्ट बनाया जो वास्तव में ऊपर दिखाता है और यह अपवाद के बिना चलता है। हो सकता है कि आप इस प्रश्न से समस्या के समान हैं: http://stackoverflow.com/questions/3636761/how-to-debug-this-error-when-none-of-my-code-shows-up-in- द स्टैक – shf301
और उस विंडो को 'लॉन्च व्यूअर थ्रेड' से कैसे बंद करें? –