【发布时间】:2018-04-08 22:51:32
【问题描述】:
在某些游戏中,有一个从服务器下载内容的启动画面。它可能会在您等待时提供一些提示。我正在做类似的事情,只是加载发生得非常快,但我希望它再等几秒钟。
当用户第一次加载我的应用程序时,它有一个带有进度条的屏幕。目前,它检查服务器是否在线。如果是,则显示“已连接!”但是,它会立即淡出我的控件。我希望它再等 5 秒,以便读者阅读。然后淡出控件。
private void frmMain_Loaded(object sender, RoutedEventArgs e)
{
// Start background worker
m_bgWorker = new System.ComponentModel.BackgroundWorker();
m_bgWorker.ProgressChanged += M_bgWorker_ProgressChanged;
m_bgWorker.WorkerReportsProgress = true;
m_bgWorker.RunWorkerAsync();
m_bgWorker.ReportProgress(100);
}
private void M_bgWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progConnect.Value = 0;
if (SystemBO.IsOnline())
{
lblConnection.Content = "Connected!";
}
progConnect.Value = e.ProgressPercentage;
// TODO: Wait 5 seconds here...
// Fade out controls
lblTitle.BeginAnimation(Label.OpacityProperty, doubleAnimation);
progConnect.BeginAnimation(Label.OpacityProperty, doubleAnimation);
lblConnection.BeginAnimation(Label.OpacityProperty, doubleAnimation);
}
注意:
- 我试过
System.Sleep(),但没有任何区别。我明白为什么。不过想法是一样的:我希望后台工作人员在完成之前休眠 5 秒。
解决方案:
我添加了更多事件:DoWork 和 RunWorkerCompleted。
然后我添加了这段代码:
private void M_bgWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{
m_index++;
System.Threading.Thread.Sleep(40);
m_bgWorker.ReportProgress(m_index);
}
System.Threading.Thread.Sleep(3000); // wait 3 seconds to read
}
成功了。进度条的动画非常流畅。
【问题讨论】: