कोई भी जानता है कि Dispatcher
से कोई मान वापस कैसे करें। wpf में? मैं चयनित सूचकांक को ComboBox के लिए वापस करना चाहता हूं।Dispatcher.Invoke के साथ एक मूल्य कैसे वापस करें?
धन्यवाद!
कोई भी जानता है कि Dispatcher
से कोई मान वापस कैसे करें। wpf में? मैं चयनित सूचकांक को ComboBox के लिए वापस करना चाहता हूं।Dispatcher.Invoke के साथ एक मूल्य कैसे वापस करें?
धन्यवाद!
int result = -1;
// this is synchronous
myCombo.Invoke(() =>
{
result = myCombo.SelectedIndex;
});
return result;
यह निश्चित रूप से, तरह का गुंजाइश है। बेहतर डिजाइन आपके वीएम में बदलकर INotifyProperty को कार्यान्वित करना होगा, एक चयनित इंडेक्स प्रॉपर्टी बनाएं और SelectedIndex
अपने कॉम्बो बॉक्स की संपत्ति को बांधें। आईएनपीसी बाइंड थ्रेड-असंवेदनशील (3.5 या 4.0+, मुझे याद नहीं है), ताकि आप चिंता के बिना अपने वीएम में अलग-अलग धागे से इन गुणों को पढ़ और अपडेट कर सकें।
आप इसे सीधे नहीं कर सकते लेकिन आप यह कर सकते हैं।
डिस्पैचर.इनवोक() वास्तव में आपके द्वारा कॉल किए गए प्रतिनिधि से वापसी मूल्य लौटाता है, इसलिए तदनुसार अपने प्रतिनिधि को बदलें।
वापसी मूल्य
प्रकार: प्रतिनिधि लागू किया जा रहा है या अशक्त से वापसी मान System.Object यदि प्रतिनिधि कोई वापसी मूल्य है।
यह एक combobox के लिए चयनित मान प्राप्त करने के लिए अपने विधि है, मैं कैसे कह सकते हैं प्रतिनिधि मान देने के लिए?
private object getValueCB(System.Windows.Controls.ComboBox cb)
{
object obj;
if (!cb.Dispatcher.CheckAccess())
{
obj = cb.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
obj = cb.SelectedValue;
}
));
return obj;
}
else
{
return obj = cb.SelectedValue;
}
}
मैंने इसे हल किया है।
private object GetValueCB(System.Windows.Controls.ComboBox cb)
{
object obj = null;
if (!cb.Dispatcher.CheckAccess())
{
obj = cb.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
(MyDelegate)
delegate()
{
return (obj = cb.SelectedValue);
}
);
return obj;
}
else
{
return obj = cb.SelectedValue;
}
}
public delegate object MyDelegate();
) एक और तरीका है कि आह्वान (से मान देता है:
object oIsLoaded = container.Dispatcher.Invoke(new Func<bool> (() =>
{
return container.IsLoaded;
})
);
और वैसे, संभावना है कि शुरुआत में होते हैं समाधान है कि इस तरह वांछित प्रकार देता है एक कस्टम प्रतिनिधि बनाने है कोड (जो प्रतिनिधि के साथ काम कर रहा है) oIsLoaded
को बिल्कुल संशोधित नहीं करेगा; इसलिए मैं उस तरह के फ़ंक्शन से मूल्य लौटने के लिए Func<>
का उपयोग करूंगा।
ऊपर मैं अपना स्निपेट कोड पोस्ट करता हूं, मैं इसे कैसे संशोधित कर सकता हूं ताकि प्रतिनिधि को कम्बोबॉक्स के लिए चयनित मूल्य लौटा सकें? धन्यवाद – toni
एक्शन रिटर्न वैल्यू की अनुमति नहीं देता है, इस मामले में आपको @Will – Chris
जैसे समाधान का उपयोग करना होगा, समाधान समाधान कॉम्बोबॉक्स डब्ल्यूपीएफ कंट्रोल में काम नहीं करेगा। मुझे एक त्रुटि मिलती है। – toni