C # / WPF - я не могу обновить интерфейс от фонового работника
У меня есть код, который выбирает твиты из определенной учетной записи Twitter, используяTweetsharp библиотека, создает экземпляр кастомаUserControl
и опубликовать твит текст к этомуUserControl
затем добавьте его в.StackPanel
Тем не менее, я должен получить много твитов, и кажется, что приложение зависнет при добавлении пользовательских элементов управления в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, потому что это требуется для многих компонентов пользовательского интерфейса.
Я пытался также с помощьюSTA System.Threading.Thread вместо BackgroundWorker но без везения!
Что мне не хватает? Я'Я действительно новичок в WPF, и я могу игнорировать что-то важное.