0
我有一個.cab
提取實用程序。在我的主窗口中,我想顯示正在提取的.cab
的名稱,現在正在提取哪個文件,以及完成提取的百分比。用戶界面卡住,直到後臺進程已完成
我已寫入每個字段的屬性,即file name
,percentage
等等,這些屬於我的ViewModel
。
所有工作正常,但它不會反映在UI
MainVindowViewModel
:分別提取的文件前後
private void ExtractCab(string outputDirectory)
{
m_CabinetFile.FileExtractBefore += new EventHandler(CabinetFile_FileExtractBefore);
m_CabinetFile.FileExtractComplete += new EventHandler(CabinetFile_FileExtractComplete);
}
public string FileExtract
{
get
{
return _fileExtract;
}
set
{
_fileExtract = value;
NotifyPropertyChanged("FileExtract");
}
}
public int Percent
{
get
{
return _percent;
}
set
{
_percent = value;
NotifyPropertyChanged("Percent");
}
}
方法上述兩個事件觸發。
用下面的方法,我得到的是,當越來越提取駕駛室我所需要的所有信息,但它不會反映在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中。用戶界面卡住,直到完成駕駛室被提取。
我的建議是查看'async \ await'功能或'BackgroundWorker'控件。 'BackGroundWorker'比較容易理解,但是在我看來,'async \ await'是現今更好的解決方案,一旦你瞭解了它的工作原理。 – AndreySarafanov
@Sheridan我認爲這是錯誤請求,而不是'如何'發佈。 –
@LIUFA,這是一個問答網站,而不是一個錯誤請求或報告網站。問題作者在他們的BackgroundWorker中顯然存在問題,因此鏈接的問題將幫助他們解決這個問題。 – Sheridan