में पृष्ठभूमिवर्कर के साथ यूआई अपडेट करना मैं वर्तमान में एक साधारण WPF 3.5 एप्लिकेशन लिख रहा हूं जो SharePoint COM पर कॉल करने के लिए SharePoint COM का उपयोग करता है और समूह और उपयोगकर्ता जानकारी उत्पन्न करता है। चूंकि इस प्रक्रिया में कुछ समय लगता है, जबकि समूह उत्पन्न होने के दौरान मैं प्रोग्रेसबार दिखाना चाहता हूं। वांछित प्रक्रिया निम्नानुसार है:WPF
- उपयोगकर्ता साइट डेटा लाने के लिए यूआरएल और क्लिक बटन दर्ज करता है।
- ProgressBar शुरू होता है एनीमेशन
- समूह उत्पन्न कर रहे हैं और नाम एक ListView
- पूरा होने ProgressBar एनीमेशन पर से जुड़ जाते हैं समाप्त होता है
समस्या मैं में चल रहा हूँ कि UI को अपडेट नहीं किया जाता है। न तो प्रोग्रेसबार या लिस्ट व्यू में कोई बदलाव आता है। अगर किसी के पास नीचे दिए गए कोड में मदद करने के लिए कोई विचार है तो इसकी सराहना की जाएगी।
private void GetGroupsAndUsersButton_Click(object sender, RoutedEventArgs e)
{
siteUrl = "";
if (SiteURLTextBox.Text.Length > 0)
{
FetchDataProgressBar.IsIndeterminate = true;
mWorker = new BackgroundWorker();
mWorker.DoWork += new DoWorkEventHandler(worker_DoWork);
mWorker.WorkerSupportsCancellation = true;
mWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
mWorker.RunWorkerAsync();
}
else
{
System.Windows.MessageBox.Show("Please enter a URL for the SharePoint site you wish to retrieve data");
}
}
private void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
siteUrl = SiteURLTextBox.Text;
GroupListView.ItemsSource = null;
try
{
using (SPSite site = new SPSite(siteUrl))
{
SPWeb web = site.OpenWeb();
SPGroupCollection collGroups = web.SiteGroups;
if (GroupNames == null)
GroupNames = new List<string>();
foreach (SPGroup oGroup in collGroups)
{
GroupListView.Items.Add(new ListViewItem() { Content = oGroup.Name });
}
foreach (ListViewItem item in GroupListView.Items)
{
item.MouseLeftButtonUp += item_MouseLeftButtonUp;
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show("Unable to locate a SharePoint site at: " + siteUrl);
}
}
private void worker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
FetchDataProgressBar.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
FetchDataProgressBar.IsIndeterminate = false;
}
));
}
पर कॉल करते हैं, आपके उत्तर के लिए धन्यवाद। अफसोस की बात है, अभी भी कोई जीयूआई अपडेट नहीं है। साथ ही, डिबगिंग करते समय, प्रगति में बदलाव आया घटना कभी हिट नहीं हुई। यह तुरंत कार्यकर्ता_रुनवर्कर पर टूट जाता है हालांकि (???) – pstricker
क्या आपने कभी भी लूप को कोशिश/पकड़ने में पहुंचाया? – Kooki
थोड़ा tinkering के बाद मैं कोड क्लिक करके कोशिश/पकड़ पकड़ने में सक्षम था जो यूआई तत्वों (GroupListView और SiteUrlTextBox) को बटन क्लिक इवेंट में संदर्भित करता है, हालांकि अब ListViewItem शुरू करते समय यह अपवाद फेंक रहा है: "कॉलिंग थ्रेड आवश्यक है एसटीए बनें, क्योंकि कई यूआई घटकों को इसकी आवश्यकता होती है। " – pstricker