2014-07-23 169 views
0

我想在ThreadPool線程中訪問ASP.Net會話。 頁面執行完成,但線程將再執行5-10秒。在多線程/線程池中訪問asp.net會話線程

代碼看起來像下面

Dim tContex As HttpContext = HttpContext.Current 
ThreadPool.QueueUserWorkItem(AddressOf ThreadPoolCallBack, tContex) 

的方法像下面

Public Sub ThreadPoolCallBack(ByVal threadContext As Object) 
    HttpContext.Current = CType(threadContext, HttpContext) 
    Dim userId As Integer = HttpContext.Current.Session("userId") 
    DoProcess() 
End Sub 

在ThreadPoolCallBack方法我能夠訪問的HttpContext和請求PARAM變量,但我無法訪問會話變量,因爲我我正在輸掉Sessions。 會話在HttpContext.Current中變爲NULL/Nothing *

有沒有什麼辦法可以在另一個線程中訪問ASP.Net sessios。

+0

你把'ThreadPool.QueueUserWorkItem'在哪裏? –

回答

0

是的,有一種方法。

改爲傳遞會話變量。

代碼

ThreadPool.QueueUserWorkItem(AddressOf ThreadPoolCallBack, HttpContext.Current.Session) 

方法

Private Sub ThreadPoolCallBack(ByVal threadContext As Object) 
    Dim session = CType(threadContext, HttpSessionState) 
    If (session IsNot Nothing) Then 
     Dim userId As Integer = session("userId") 
    End If 
End Sub 
+0

這是行不通的,因爲我正在研究直接需要訪問會話的現有代碼。我無法修改現有的代碼庫。 – nRk