我希望在我的应用程序创建复杂屏幕时显示进度条。我的代码是:
protected override void LoadSubject(object sender)
{
var win = new Spinner();
win.Show();
Thread th = new Thread(() =>
{
LoadSubjectImpl(sender);
win.Dispatcher.BeginInvoke(new Action(() => win.Close()));
});
th.Start();
}
private void LoadSubjectImpl(object sender)
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
StartServiceWorkflow(sender);
})
);
}
它的工作正常,但进度条冻结...... 我必须在后台线程中使用调度程序,因为“InvalidOperationException”并且我认为这个问题,但我该怎么办?
答案 0 :(得分:3)
你没有运气试图实现你所描述的。如果您仔细阅读InvalidOperationException,您就会知道无法从后台线程操作UI。您使用Dispatcher所做的是将StartServiceWorkflow
同步到UI线程。所以你的代码正在执行 - 导致冻结。
要实现一些用户体验增强,您可以委派后台线程任务,如读取表单数据库或处理要显示的数据。