2010-03-21 111 views
0

我有一個「加載進度」WPF窗體,當我開始將一些結果加載到我的主窗口中時,並且每次加載結果時,我都會實例化一個「加載進度」窗體,我希望進度欄填充x量(基於數量我正在加載的結果)。我應該穿這個嗎?

但是,發生的情況是,窗口中的進度條一直保持空白,直到結果加載完成,然後它將只顯示完整的進度條。

這是否需要線程才能正常工作?或者僅僅是爲了處理我試圖讓它起作用的方式?

//code snippet 
LoadingProgress lp = new LoadingProgress(feedCount); 
lp.Show(); 
foreach (FeedConfigGroup feed in _Feeds) { 
    feed.insertFeeds(lp); 
} 

//part of insertFeeds(LoadingProgress lbBox) 
foreach (Feeds fd in _FeedSource) { 
    lpBox.setText(fd.getName); 
    XmlDocument feedResults = new XmlDocument(); 
    feedResults.PreserveWhitespace = false; 
    try { 
     feedResults.Load(wc.OpenRead(fd.getURL)); 
    } catch (WebException) { 
     lpBox.addError(fd.getName); 
    } 
    foreach (XmlNode item in feedResults.SelectNodes("/rss/channel/item")) { 
     //code for processing the nodes... 
    } 
    lpBox.progressIncrease(); 
} 

如果需要更多的代碼請告訴我。

回答

1

我建議你使用另一個線程來處理。進度條最後填滿了,所以你沒有在編程上犯錯。
通常,您應該避免在用戶界面線程中進行處理。

0

那麼,多少飼料和多少物品?我會等你來計算它們,以便設置進度條的總長度。

...

那是什麼?在大部分工作已經完成之前,你會不知道總數?那麼,聽起來像進度欄不是正確的控制使用。

你在做(至少應該是什麼)異步工作在這裏。絕對是在工作者線程中完成的。絕對讓用戶知道工作正在後臺進行。但不要使用進度條。在所有持續的流程完成之前,您無法確切知道您所處的流程中的哪一點以及您需要走多遠。你的大多數用戶會看到你的進度條是謊言,會嘲笑你的吮吸。

只需使用標準的「工作正在後臺進行」fadey-circle-thingy在您的RSS提要框(Adorner會很好地工作)並完成它。

0

使用this video我設法得到它的工作,Dispatch.BeginInvoke(除了需要Dispatcher.Invoke之一)是要走的路。如果任何人想要最終的代碼讓我知道,我可以發佈它。