मैंने पहले से ही फोरम की खोज की है लेकिन मुझे लगता है कि कोई समस्या नहीं है मेरी समस्या के लिए उपयुक्त है ...BackgroundWorker_RunWorker क्यों लागू नहीं हुआ GUI अपडेट नहीं किया गया है?
मैं एक बहुत समय लेने वाला ऑपरेशन संभालने के लिए पृष्ठभूमिवर्कर का उपयोग करता हूं। इस ऑपरेशन के बाद एक बटन को सक्षम करने के लिए सेट किया जाना चाहिए ताकि उपयोगकर्ता एक और ऑपरेशन कर सके।
मैं WPF का उपयोग कर रहा हूं और मैं एमवीवीएम पैटर्न का पालन कर रहा हूं, इसलिए मेरे पास इस बटन तक कोई सीधी पहुंच नहीं है। मुझे BackgroundWorker_RunWorker पूर्ण ईवेंट हैंडलर में एक विधि कॉल करना है जो एक प्रॉपर्टी सेट करता है, बटन को सक्षम-स्टेटस का प्रतिनिधित्व करता है, सच में।
यह सब एक चीज़ को छोड़कर ठीक काम करता है: बटन को केवल उदाहरण के बाद फिर से खींचा जाता है विंडो में क्लिक करें (या विंडो को अधिकतम करें, ...)। बहुत कष्टप्रद है और मुझे पूरा दिन ले लिया यही इस व्यवहार से छुटकारा पाने के, लेकिन मैं एक समाधान नहीं मिल सकता है ...
BackgroundWorker_RunWorkerCompleted ईवेंट हैंडलर इस तरह दिखता है:
void fileLoadBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
SetButtonToEnabled(); }
किसी को भी किसी भी विचार कैसे है इस मुद्दे को ठीक करने के लिए?
संपादित करें:
बटन एक आदेश के लिए बाध्य है: के रूप में स्मिथ ने अपने ब्लॉग (http://msdn.microsoft.com/en-us/magazine/dd419663.aspx) में कहा गया है
<Button Name="btnLoadTargetFile" Command="{Binding Path=LoadTargetCommand}" .../>
यह आदेश एक RelayCommand है और इस तरह दिखता है:
public RelayCommand LoadTargetCommand
{
get
{
if (loadTargetCommand == null)
{
loadTargetCommand = new RelayCommand(param => this.OnRequestLoadFile(BusinessLogic.CustomTypes.TreeType.Target), param => this.CanLoadTarget);
}
return loadTargetCommand;
}
set { loadTargetCommand = value; }
}
यह। CanLoadTarget को SetButtonToEnabled() द्वारा सत्य पर सेट किया गया है; विधि
संपादित करें 2:
निम्नलिखित कोड 'काम करता है':
fileLoadBackgroundWorker.RunWorkerAsync(argumentList);
while(fileLoadBackgroundWorker.IsBusy)
System.Windows.Forms.Application.DoEvents();
SetButtonToEnabled();
लेकिन वह वास्तव में खतरनाक और बदसूरत कोड के कुछ प्रकार है ...
जब आप संपत्ति को सत्य पर सेट करते हैं तो क्या आप 'प्रॉपर्टी चेंज' ईवेंट बढ़ाते हैं (यानी क्या आपका व्यूमोडेल लागू होता है 'INotifyPropertyChanged' सही ढंग से)? –
अगर मैं फ़ाइल के बाद उस विधि को कॉल करता हूं LoadBackgroundWorker.RunWorkerAsync() सब कुछ ठीक काम करता है, तो मुझे नहीं लगता कि यह समस्या है ?! – lakai
जिज्ञासा से बाहर, क्या आप फॉर्म के आकार या सीमा (सीमा रंग, आदि) में किसी भी WMI संशोधन का उपयोग कर रहे हैं? –