Tweetsharpライブラリを使用して特定の Twitter アカウントからツイートを取得し、カスタムのインスタンスを作成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に含まれるコードを a内で実行できないという問題を解決することですBackgroundWorker
が、 a を使用して実行しようとするたびBackgroundWorker
に失敗し、次のようなエラーが発生します。
多くの UI コンポーネントがこれを必要とするため、呼び出しスレッドは STA でなければなりません。
BackgroundWorker の代わりにSTA System.Threading.Threadも使用してみましたが、うまくいきませんでした。
何が欠けていますか?私はWPFに本当に慣れていないので、重要なことを無視している可能性があります。