2011-10-13 28 views
0

當文件上傳時,我在提交按鈕中有以下幾行代碼。因此請求會在後臺啓動並運行,並告訴用戶該文件正在處理中。瞭解C#中的IAsyncResult請求和線程#

// Prepare the query string 
string arguments = string.Format(
    "?guid={0}&sessionid={1}&seqstring={2}&torrstring={3}", 
    Server.HtmlEncode(_userGuid), Server.HtmlEncode(_guid), 
    Server.HtmlEncode(seqString.ToString()), 
    Server.HtmlEncode(TorRString.ToString())); 

// Initialize web request 
req = (HttpWebRequest)WebRequest.Create(
    string.Format("{0}{1}", pageUrl.ToString(), arguments)); 
req.Method = "GET"; 

// Start the asynchronous request. 
IAsyncResult result = (IAsyncResult)req.BeginGetResponse(
    new AsyncCallback(RespCallback), null); 

// this line impliments the timeout, if there is a timeout, the callback 
// fires and the request becomes aborted 
// ThreadPool.RegisterWaitForSingleObject(
// result.AsyncWaitHandle, 
// new WaitOrTimerCallback(TimeoutCallback), 
// null, DefaultTimeout, true); 

給予用戶,響應文件的代碼,但有時我覺得線程死亡和數據庫沒有更新,因此出現該文件無法完成處理。我如何判斷線程是否仍在運行?用戶提交他們的代碼,如果我確實result.IsCompleted;它說結果是空的。

+0

您使用的是哪個版本的.NET? –

+0

我正在使用.NET 3.5 – cdub

回答

0

你可能想看看這個問題,但我會質疑爲什麼你在BeginGetResponse的末尾有一個空值而不是傳回RequestState。另外,你確定你的數據庫調用沒有失敗,並且你正在責怪你的程序的錯誤部分?

Asynchronous upload using HttpWebRequest

1

你能編輯您的文章,幷包括整個按鈕單擊處理程序和RespCallbackTimeoutCallback方法呢?這會讓你的問題更容易回答。我們需要知道您的頁面是否等待WebRequest完成。

我猜你的網頁不會等待,但你的代碼大部分時間都在工作。如果是這樣,WebRequest將與您的正常頁面生命週期異步運行。如果頁面在WebRequest之前完成,則IIS可以回收應用程序池,並且您的後臺請求將被銷燬。它將在大多數情況下工作,因爲IIS通常不會選擇回收,因此WebRequest將繼續完成。

+0

我該如何解決這個問題? – cdub

+0

@chris:您需要先了解這是否是問題!你可以編輯你的問題,並添加更多的細節? –

+0

所以我很困惑,頁面不會等待並正常結束。然後,我轉到另一個頁面,可以知道該線程仍在運行,有時該頁面會告訴我它已完成。其他時候,它似乎永遠運行,永遠不會回到回調函數。 – cdub