我使用Microsoft的WUApiLib庫進行編程。我編寫了一個簡單的應用程序,用於搜索未安裝的所有軟件更新,然後下載並安裝它們。這部分工作完美(我用這裏找到的代碼來幫助:http://www.nullskull.com/a/1592/install-windows-updates-using-c--wuapi.aspx)。C#WUApiLib - 異步下載和安裝
但是,我想使用庫的BeginDownload,EndDownload,BeginInstall和EndInstall功能,以便它可以將進度報告回接口。這篇文章中的功能是同步的,我提到的功能是異步的。
我使用的第一個回答這個網頁上的模板: C# and WUAPI: BeginDownload function
然而,我的invoke()函數是從來沒有得到所謂的,我想不通爲什麼。
iUpdateDownloader_onProgressChanged progress = new iUpdateDownloader_onProgressChanged(this);
IDownloadJob downloadJob = downloader.BeginDownload(progress, new iUpdateDownloader_onCompleted(this), new iUpdateDownloader_state(this));
public class iUpdateDownloader_onProgressChanged : IDownloadProgressChangedCallback
{
private frmMain form1;
public iUpdateDownloader_onProgressChanged(frmMain mainForm)
{
this.form1 = mainForm;
}
// Implementation of IDownloadProgressChangedCallback interface...
public void Invoke(IDownloadJob downloadJob, IDownloadProgressChangedCallbackArgs e)
{
decimal bDownloaded = ((e.Progress.TotalBytesDownloaded/1024)/1024);
decimal bToDownloaded = ((e.Progress.TotalBytesToDownload/1024)/1024);
bDownloaded = decimal.Round(bDownloaded, 2);
bToDownloaded = decimal.Round(bToDownloaded, 2);
form1.setDownloadProgressText("Downloading Update: "
+ e.Progress.CurrentUpdateIndex
+ "/"
+ downloadJob.Updates.Count
+ " - "
+ bDownloaded + "Mb"
+ "/"
+ bToDownloaded + "Mb");
}
}
我可以在Invoke函數的第一行放置一個斷點,它永遠不會到達那裏。
任何想法?
所以不是通過這個,你會通過什麼? – Stephen 2014-10-08 15:31:26
您可以傳遞「this」,但是當您的UI片斷(在您的接口實現中引用)已添加到窗口中時,您可以在函數內部執行此操作,例如在表單加載事件處理程序結束時(InitializeComponent那是)。不過,重要的是將UI操作函數編組到UI線程。再次,我認爲onState實現對象可能會導致錯誤,因爲無法執行此操作,並且錯誤會停止所有操作。 – 2014-10-08 16:55:06
如果您需要更多信息,請不要猶豫,我會盡力進一步澄清。 – 2014-10-08 20:04:29