【发布时间】:2016-09-11 11:01:26
【问题描述】:
首先,我应该提到我已经阅读了this post 和this 和this,但它们似乎都没有解决我的问题。
简单解释,我有一个非托管 DLL,它在调用的动作中被多次调用,即
var d = new List<string>();
var myData = new StringBuilder();
this.Dispatcher.Invoke(new Action(() =>
{
myDLL.GetDataFromIndex(2, myData);
d.Add(myData.ToString());
myDLL.GetDataFromIndex(3, myData);
d.Add(myData.ToString());
myDLL.GetDataFromIndex(4, myData);
d.Add(myData.ToString());
//....
}
), System.Windows.Threading.DispatcherPriority.ContextIdle);
我想通过ProgressBar 显示获取数据的进度。首先,我尝试在每个 DLL 调用之后立即更新 ProgressBar,方法是在每个 d.Add(...) 之后添加以下行
pbStatus.Value = newValue;
这显然没有用,而且还破坏了myDLL 的通话。然后我了解到ProgressBar 必须通过BackgroundWorker 更新,但我无法在调用的操作中定义新的BackgroundWorker。此外,DLL 调用需要不同的时间。例如,在GetDataFromIndex(2, ...) 完成了 20% 的过程之后,接下来的索引分别占 5% 到 10%。现在我不知道如何在每次 DLL 调用后立即更新 ProgressBar。由于我在数小时的毫无意义的谷歌搜索中筋疲力尽,任何提示或解决方法都将不胜感激。
【问题讨论】:
-
@MichalHainc 我没有粘贴完整的代码,因为如果没有 DLL,它将毫无用处。我尽可能清楚地说明了这个问题。破坏 dll 调用意味着 dll 之前获得了正确的数据,但奇怪的是,之后却没有。也不例外
标签: c# wpf progress-bar backgroundworker