我有這是異步運行Windows SVC(我編輯的方法和參數,使它們異步),有點像:http://msdn.microsoft.com/en-us/library/ms731177.aspxIAsyncresult - 不凍結UI的輪詢?
不過,我打電話,我要異步運行的任務(調用服務/服務器),然後更新UI(使用BackgroundWorker上的ReportProgress() - 所有這些都發生在背景工作者的dowork()方法中)。但是,我調用Endxxx方法來獲得結果,但問題是,我的代碼不應該是這樣嗎?
while (!asyncresult.IsCompleted) { // Do all UI updating etc here... }
// Call endXXX here.
但是,這種方法會鎖定用戶界面。目前,我的代碼是這樣的(並且不鎖定UI):
IAsyncResult res = null;
try
{
res = serviceX.BeginXXX(ResultCallBack, "");
}
catch (FaultException<ManagementException> managementEx)
{
Logger.Error(managementEx.Detail.ToString());
MessageBox.Show("Could not add printer. See log.");
}
InstallBackgoundWorker.ReportProgress(90);
InstallBackgoundWorker.ReportProgress(91);
InstallBackgoundWorker.ReportProgress(93);
InstallBackgoundWorker.ReportProgress(94);
InstallBackgoundWorker.ReportProgress(95);
InstallBackgoundWorker.ReportProgress(96);
InstallBackgoundWorker.ReportProgress(97);
if (res.IsCompleted)
{
ResultCallBack(res);
}
InstallBackgoundWorker.ReportProgress(100);
這是正確的嗎?這對我來說似乎是錯誤的。
僅供參考,這不是Windows服務,正如您聲稱的那樣。這是一個WCF服務。 Windows服務是一個應用程序,通過服務管理器在主機上運行,並且無論用戶是否登錄都可以運行。您讓我非常困惑,因爲您爲什麼在Windows服務中這樣做。 – 2011-05-11 23:05:43