【发布时间】:2017-09-09 07:38:13
【问题描述】:
我有以下代码:
Public Sub ExecuteMyCommand
ShowProgressBar=True
CallLongRunningProcess
ShowProgressBar=False
End Sub
要让 UI 中的进度条在长时间运行的进程开始之前实际显示,必须将这段代码重写为:
Public Async Sub ExecuteMyCommand
ShowProgressBar=True
Await Task.Run(Sub() CallLongRunningProcess)
ShowProgressBar=False
End Sub
现在的问题:
在某些方法中,长时间运行的过程涉及创建 WPF 用户控件。这些必须在 STA 线程上创建。我已经找到了如何做到这一点,但后来我得到了一个 InvalidOperationException,因为用户控件归非 UI 线程所有。所以,我正在寻找一种在调用 UI 线程上长时间运行的进程之前更新 ShowProgressBar 属性的方法(是的,丑陋,我知道)。
【问题讨论】:
-
“所以,我正在寻找一种在 UI 线程上调用长时间运行的进程之前更新 ShowProgressBar 属性的方法”是什么意思,它只是一个布尔值,更新是什么意思?
-
@Sybren ShowProgressBar 属性绑定到视图中的 ProgressBar.Visibility 属性。抱歉,如果不清楚。
标签: wpf multithreading mvvm