अपडेट नहीं कर रहा है मेरे पास एक प्रोग्रेसबारविंडो है जिसमें एक प्रगति पट्टी है और उस पर एक रद्द बटन है जिसका उपयोग मैं फ़ाइल I/O पर प्रगति की रिपोर्ट करने के लिए करता हूं। हालांकि, प्रोग्रेसबारविंडो का UI थ्रेड और मेरी मुख्य विंडो दोनों पृष्ठभूमि कार्यकर्ता में किए जा रहे सभी कार्यों के बावजूद लटका है। प्रगति पट्टी प्रदान की जाती है, जैसा कि मेरी मुख्य खिड़की है, लेकिन बैकग्राउंडर अपनी बात करता है, लेकिन अद्यतन नहीं करता है। निम्नलिखित कोड मुख्य विंडो के निर्माता के अंत में कहा जाता है:सी # प्रोग्रेसबार
iCountLogLinesProgressBar = new ProgressBarWindow();
iCountLogLinesProgressBar.cancelButton.Click += EventCountLogLinesProgressBarCancelButtonClicked;
iCountLogLinesProgressBar.Show();
iCountLogRecords = new BackgroundWorker();
iCountLogRecords.DoWork += EventCountLogLinesDoWork;
iCountLogRecords.ProgressChanged += EventCountLogLinesProgressChanged;
iCountLogRecords.RunWorkerCompleted += EventCountLogLinesRunWorkerCompleted;
iCountLogRecords.WorkerReportsProgress = true;
iCountLogRecords.WorkerSupportsCancellation = true;
iCountLogRecords.RunWorkerAsync(new BinaryReader(File.Open(iMainLogFilename, FileMode.Open, FileAccess.Read)));
EventCountLogLinesProgressChanged() इस तरह दिखता है:
private void EventCountLogLinesProgressChanged(object sender, ProgressChangedEventArgs e)
{
iCountLogLinesProgressBar.Value = e.ProgressPercentage;
}
यहाँ ProgressBarWindow का एक छोटा संस्करण है (बाकी है सिर्फ एक setters की जोड़ी):
public partial class ProgressBarWindow : Window
{
public ProgressBarWindow()
{
InitializeComponent();
this.progressBar.Value = this.progressBar.Minimum = 0;
this.progressBar.Maximum = 100;
}
public double Value
{
get
{
return progressBar.Value;
}
set
{
this.progressBar.Value = value;
}
}
}
मैं एक dispatcher.invoke प्रतिनिधि में मूल्य सेटर लाइन लपेटकर की कोशिश की है लेकिन यह है कि मुझे एक Stac देता है k ओवरफ़्लो (मुझे पृष्ठभूमि के रूप में एक dispatcher.invoke लाइन नहीं होनी चाहिए, जैसा कि पृष्ठभूमि कार्यकर्ता यूआई थ्रेड में प्रगति की प्रगति करता है, है ना?)। मैंने msdn और googled की जांच की है लेकिन मुझे इस समस्या के साथ किसी और को नहीं मिल रहा है।
संपादित क्षमा याचना, मैं अपने सरलीकृत कोड यूआई धागा अवरुद्ध एहसास नहीं था, मैं बिल्कुल वैसा ही व्यवहार मिलता है एक BackgroundWorker उपयोग करने के बावजूद इसलिए मैं ग़लती से मान लिया है कि वे बराबर थे। मुझे यह उल्लेख करना चाहिए था कि मैं बैकग्राउंडवर्कर का उपयोग कर रहा था: पी
मेरे पास ऊपर एक पृष्ठभूमि कार्यकर्ता है, लेकिन क्या मुझे अपने मूल्य सेटटर के लिए dispatcher.invoke कॉल की भी आवश्यकता है? – CalumMcCall
@ teflon19: नहीं, आपको कुछ और करने की आवश्यकता नहीं है - यह सुनिश्चित करने के अलावा कि आप पृष्ठभूमि कार्यकर्ता में प्रगति की रिपोर्ट कर रहे हैं। –
प्रगति में परिवर्तन होने पर ही मैं प्रगति की रिपोर्ट कर रहा हूं, बहुत से प्रगतिशील घटनाएं चीजों को धीमा कर रही थीं, लेकिन यूआई अभी भी स्थिर हो गई है। क्या कोई कारण है कि प्रोग्रेसबार यूआई थ्रेड पृष्ठभूमिवर्कर से प्रभावित होगा? – CalumMcCall