【发布时间】:2014-12-03 07:40:12
【问题描述】:
我正在使用 Microsoft 的 WUApiLib 库进行编程。我编写了一个简单的应用程序,它搜索所有未安装的软件更新,然后下载并安装它们。这部分运行良好(我使用此处找到的代码来提供帮助:http://www.nullskull.com/a/1592/install-windows-updates-using-c--wuapi.aspx)。
但是,我想利用库的 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 函数的第一行设置一个断点,但它永远不会到达那里。
有什么想法吗?
【问题讨论】:
标签: c# winapi asynchronous visual-studio-2013 windows-update