【发布时间】:2014-07-25 09:06:27
【问题描述】:
我有一个.cab 提取实用程序。在我的主窗口中,我想显示正在提取的.cab 的名称、当前正在提取的文件以及已完成提取的百分比。
我已经为每个字段编写了属性,即file name、percentage 等...在我的ViewModel 上。
一切正常,但未反映在 UI 上
MainVindowViewModel:
public string FileExtract
{
get
{
return _fileExtract;
}
set
{
_fileExtract = value;
NotifyPropertyChanged("FileExtract");
}
}
public int Percent
{
get
{
return _percent;
}
set
{
_percent = value;
NotifyPropertyChanged("Percent");
}
}
提取方法
private void ExtractCab(string outputDirectory)
{
m_CabinetFile.FileExtractBefore += new EventHandler(CabinetFile_FileExtractBefore);
m_CabinetFile.FileExtractComplete += new EventHandler(CabinetFile_FileExtractComplete);
}
以上两个事件分别在文件提取前后触发。
通过以下方法,我可以获取提取驾驶室时所需的所有信息,但不会反映在 UI 上
private void CabinetFile_FileExtractBefore(object sender, System.EventArgs e)
{
TFile file = (TFile)sender;
FileExtract = file.FullName;
}
private void CabinetFile_FileExtractComplete(object sender, System.EventArgs e)
{
Count++;
Percent = Convert.ToInt32(((decimal)Count / (decimal)m_CabinetFile.FileCount) * 100);
}
FileExtract 和 Percent 属性绑定到 XAML UI,它在代码中而不是在 UI 中得到更新。 UI 一直卡住,直到提取了完整的驾驶室。
【问题讨论】:
-
我的建议是查看
async\await功能或BackgroundWorker控件。BackGroundWorker更容易理解,但在我看来,async\await现在是更好的解决方案,只要您了解它的工作原理。 -
@Sheridan 我认为这是错误请求,而不是“如何”发布。
-
@LIUFA,这是一个问答网站,不是错误请求或报告网站。问题作者的
BackgroundWorker很明显有问题,所以链接的问题将帮助他们解决这个问题。