我有獲取使用Tweetsharp庫特定Twitter帳戶的鳴叫代碼,創建一個自定義UserControl
和後推文文字到UserControl
的實例,然後將其添加到StackPanel
。C#/ WPF - 我不能從一個BackgroundWorker更新UI
但是,我必須得到很多推文,看起來應用程序會凍結,同時將用戶控件添加到StackPanel
。我嘗試使用BackgroundWorker
,但直到現在我還沒有幸運。
我的代碼:
private readonly BackgroundWorker worker = new BackgroundWorker();
// This (UserControl) is used in the MainWindow.xaml
private void UserControl_Loaded_1(object sender, RoutedEventArgs e)
{
worker.DoWork += worker_DoWork;
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
int usrID;
var service = new TwitterService(ConsumerKey, ConsumerSecret);
service.AuthenticateWith(AccessToken, AccessTokenSecret);
ListTweetsOnUserTimelineOptions options = new ListTweetsOnUserTimelineOptions();
options.UserId = usrID;
options.IncludeRts = true;
options.Count = 10;
twitterStatuses = service.ListTweetsOnUserTimeline(options);
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
foreach (var item in twitterStatuses)
{
TweetViewer tweetViewer = new TweetViewer(); // A UserControl within another UserControl
tweetViewer.Tweet = item.Text;
tweetViewer.Username = "@stackoverflow";
tweetViewer.RealName = "Stack Overflow"
tweetViewer.Avatar = ImageSourcer(item.Author.ProfileImageUrl);
stackPanel.Children.Add(tweetViewer);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
我想現在要做的就是要解決不能夠執行包含在代碼的問題worker_RunWorkerCompleted一個BackgroundWorker
內,但每次我試圖用執行它一個BackgroundWorker
失敗&給了我喜歡的錯誤:
調用線程必須爲STA,因爲許多UI組件都需要這個。
我也試過用STA System.Threading.Thread,而不是BackgroundWorker的,但沒有運氣!
我錯過了什麼?我對WPF很陌生,我可能會忽略一些重要的東西。
是在主窗口類的後臺工作方法? – ali
你能告訴你如何設置'BackgroundWorker'嗎?你會在哪條線上得到例外? – YK1
@ali與** BackgroundWorker **相關的所有內容都位於_MainWindow_類中使用的另一個自定義用戶控件中。 –