Şu anda SharePoint sitelerine çağrı yapmak ve Grup ve Kullanıcı bilgileri oluşturmak için SharePoint COM kullanan bir basit WPF 3.5 uygulaması yazıyor. Bu süreç bir süre sürdüğü için gruplar oluşturulurken bir ProgressBar göstermek istiyorum.WPF'de BackgroundWorker ile Kullanıcı Arabirimini Güncelleme
- Kullanıcı url girer ve site verilerini almak için düğmeyi tıkladığında şu şekildedir: istenen bir süreçtir.
- ProgressBar animasyonu
- Gruplar oluşturulur ve isimler tamamlama ProgressBar animasyon üzerine bir ListView
- eklenir başlar İçine çalıştırıyorum sorun arayüzü güncellenmemiş asla olmasıdır
biter. Ne ProgressBar veya ListView herhangi bir değişiklik yapar. Aşağıdaki kodla ilgili yardım edecek herhangi bir fikri varsa, bu çok takdir edilecektir.
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;
}
));
}
Cevabınız için teşekkürler. Ne yazık ki, hiçbir GUI güncellemesi yok. Ayrıca, hata ayıklama sırasında, ilerleme değişti olayı asla vurulmaz. Hemen worker_RunWorkerCompleted'de kesintiye uğrar (???) – pstricker
Bu döngüye hiç denemeyi/yakalamayı başardınız mı? – Kooki
Ufak elemanlar (GroupListView ve SiteUrlTextBox) 'a basılan kodu, tuşa basma olayına yönlendiren küçük bir tinkeringden sonra try/catch'a ulaşabildim ancak şimdi ListViewItem'i başlatırken bir istisna atar: STA ol, çünkü birçok UI bileşeni bunu gerektirir. " – pstricker