ユーザーを検証する WPF アプリケーションがあります。そのユーザーが正常に認証されると、インターフェイスが変化し、ユーザーに挨拶します。そのウェルカム メッセージを 5 秒間表示してから、別のコンテンツに変更したいと考えています。これは、次を起動するウェルカム メッセージですBackgroundWorker
。
LabelInsertCard.Content = Cultures.Resources.ATMRegisterOK + " " + user.Name;
ImageResult.Visibility = Visibility.Visible;
ImageResult.SetResourceReference(Image.SourceProperty, "Ok");
BackgroundWorker userRegisterOk = new BackgroundWorker
{
WorkerSupportsCancellation = true,
WorkerReportsProgress = true
};
userRegisterOk.DoWork += userRegisterOk_DoWork;
userRegisterOk.RunWorkerAsync();
そして、これは私BackgroundWorker
の5秒の遅延です:
void userRegisterOk_DoWork(object sender, DoWorkEventArgs e)
{
if (SynchronizationContext.Current != uiCurrent)
{
uiCurrent.Post(delegate { userRegisterOk_DoWork(sender, e); }, null);
}
else
{
Thread.Sleep(5000);
ImageResult.Visibility = Visibility.Hidden;
RotatoryCube.Visibility = Visibility.Visible;
LabelInsertCard.Content = Cultures.Resources.InsertCard;
}
}
しかし、Backgroundworker は私の GUI を 5 秒間フリーズさせます。明らかに、私がやりたいことは、ウェルカム メッセージの 5 秒後にワーカー内でコードを起動することです。
GUI がフリーズするのはなぜですか?