मैं डब्ल्यूपीएफ के साथ शुरुआत कर रहा हूं और प्रौद्योगिकी से परिचित होने के लिए एक होम प्रोजेक्ट की कोशिश कर रहा हूं। मेरे पास एक साधारण रूप है जहां उपयोगकर्ता एक छवि फ़ाइल का चयन करता है, फिर मैं छवि के थंबनेल के साथ EXIF डेटा प्रदर्शित करता हूं। यह ठीक काम कर रहा है, लेकिन जब मैं एक रॉ छवि फ़ाइल (~ 9 एमबी) का चयन करता हूं तो अंगूठे के भार के दौरान थोड़ी देर हो सकती है, इसलिए मैंने सोचा कि मैं पृष्ठभूमि कार्यकर्ता का उपयोग छवि को डीकोड करने के लिए कर सकता हूं और उपयोगकर्ता EXIF डेटा देख सकता है, फिर जब छवि को डीकोड किया गया है तो यह प्रदर्शित होता है।डब्ल्यूपीएफ/पृष्ठभूमिवर्कर और बिटमैपसोर्स समस्या
BitmapSource वस्तु BackgroundWorkers DoWork विधि में घोषित किया जाता है:
worker.DoWork += delegate(object s, DoWorkEventArgs args)
{
string filePath = args.Argument as string;
BitmapDecoder bmpDecoder = BitmapDecoder.Create(new Uri(filePath), BitmapCreateOptions.None, BitmapCacheOption.None);
BitmapSource bmpSource = bmpDecoder.Frames[0];
bmpSource.Freeze(); //As suggested by Paul Betts
args.Result = bmpSource;
};
समस्या यह है कि मैं में चल रहा हूँ है जब मैं RunWorkerCompleted विधि में मेरी छवि नियंत्रण के स्रोत सेट करने के लिए मैं एक त्रुटि प्राप्त करने की कोशिश क्योंकि वस्तु का एक और धागा स्वामित्व है।
worker.RunWorkerCompleted += delegate(object s, RunWorkerCompletedEventArgs args)
{
imgThumb.Source = args.Result as BitmapSource;
};
मैं imgThumb.Dispatcher.BeginInvoke()
पद्धति का उपयोग करके स्रोत सेट करने के लिए कोशिश की, लेकिन यह या तो काम नहीं किया, मुझे लगता है, क्योंकि यह args.Result
है कि एक और धागा के स्वामित्व में है imgThumb
है, और नहीं यह क्या है? मैं इसे कैसे प्राप्त कर सकता हूं?
यह हो सकता है कि मैं अपना डिस्पैचर गलत कोड कर रहा था (निम्नलिखित स्मृति से है, मैंने जो किया है उसे हटा दिया है)।
imgThumb.Dispatcher.Invoke(new Action<BitmapSource>(
delegate(BitmapSource src)
{
imgThumb.Source = src;
}
), bmpSource);
कोई भी सुझाव या विचार स्वागत है।
अद्यतन
बदली गई मेरी DoWork विधि BitmapCreateOptions.None बजाय .DelayCreation उपयोग करने के लिए लेकिन अब मैं जब RAW फ़ाइलें लोड हो रहा है निम्नलिखित त्रुटि मिलती है (कैनन .CR2 फ़ाइलें सभी मैं तारीख को परीक्षण किया है है), कोड जेपीजी के लिए ठीक काम करता है। क्या यह रॉड फाइलों को प्रदर्शित करने की अनुमति देने के लिए स्थापित कैनन कोडेक के साथ एक मुद्दा हो सकता है?
आवेदन एक अंतरफलक है कि एक अलग थ्रेड के लिए मार्शल किया गया था बुलाया। (HRESULT से अपवाद: 0x8001010E (RPC_E_WRONG_THREAD))
मैंने बिटमैप स्रोत मूल्य को सेट करने के बाद, मेरी DoWork विधि में फ्रीज() कॉल जोड़ा। मैं फिर RunWorker पूर्ण विधि में निम्न पंक्ति जोड़ता हूं: बिटमैप स्रोत xx = args.Result; जो मुझे पहले की तरह एक ही त्रुटि देता है। क्या मुझे कुछ भी याद आ रही है? मैंने डिस्पैचर का उपयोग करके कोई कोड निकाला है। – Fermin
मैं एक डंबस था लेकिन अब एक अंतर है। त्रुटि, अद्यतन प्रश्न। – Fermin
कई सालों बाद भी। आपका बहुत बहुत धन्यवाद। पूरे नेट पर यह देख रहा है – Kulpemovitz