我想为我的Windows窗体应用程序中的几个控件提供动画/转换,这要求用户同时移动几个控件不阻塞UI。
根据我在多个博客/帖子上所读的内容,Windows窗体具有单个UI线程,在该情况下,我可以完成所有与UI相关的任务(Link),但是不能显示平滑过渡,例如:-
如果您有任何建议/解决方法,或者想指出我所提到的任何错误,请随时进行。
BackgroundWorker
类执行此操作,并以一定的时间间隔报告工作人员的进度:private void button1_Click(object sender, EventArgs e)
{
var backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork += (s, a) =>
{
for (var i = 0; i < 100; i = i++)
{
Thread.Sleep(15);
backgroundWorker.ReportProgress(i);
}
};
backgroundWorker.ProgressChanged += (s, a) =>
{
var percentage = a.ProgressPercentage;
panel1.Top = percentage;
};
backgroundWorker.RunWorkerCompleted += (s, a) =>
{
// do something when animation is complete
};
backgroundWorker.RunWorkerAsync();
}
[它还支持取消,以防您需要中断它。