Thread class and Session variable

G

Guest

Hi All,

I am trying to perform a non-CPU bound operation in an asynchronous fashion
using 'Thread' and a delegate. Basically, I am spawning a thread using
ThreadStart and Thread.

My non-CPU bound operation needs to have access to Session variables; Even
though I embedded the state information (which also includes the context
object) in an object and passed the object to the Thread , I am unable to
access the Session variables. The system throws a Null Object Reference error.

Since the thread that I am spawning is not from the CLR thread pool, it is
not able to access the Session variable. Am I right? How can a system thread
get access to the Session variables of the current HTTPRequest?

I hope I articulated my problem. If not, please let me know.

Any pointers will be appreciated!
 
O

OHM

This example ( albiet in Visual Basic.NET ) seems to work ok. Im not sure
what you are doing differently , or if I have misunderstood you ?

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim myThread As New Threading.Thread(AddressOf mySpawned)

Session("TestMe") = "Hello World"

myThread.Start()

End Sub


Private Sub mySpawned()

Dim s As String = Session("TestMe")

End Sub
 
G

Guest

Hi OHM,

Thanks for your response.

Here is what I am trying to do (in C#):

=====

ThreadStart t = new ThreadStart(LongDBProcess)
// LongDBProcess is a time-consuming process
Thread ts = new Thread(t);
t.start(); //At this point, system thread will be created and not
the CLR thread

====

I need to have access to Session variables inside my LongDBProcess...

private void LongDBProcess()
{
Session["IDCounter"] = i+1; //At this point, I am getting null
reference
}

If I am correct, the thread is not able to access the session. Probably this
thread's scope is outside the Application Domain whereas the session data
will be inside the Application Domain...am I correct?

Thanks for your pointers.
 
O

OHM

Hmm, not sure on this one. If you can do it with vb.net you should be able
to do it somehow with C#, but I cant get it to work either. The delegate is
obviously working ok, but it seems to have lost its connection to the
context.

I think its probably the way the thread has been started, but I dont
normally do that much with threading It's not something which rattles off
the tip of my head.

My suggestion is to repost this question on the C# newsgroup, someone there
is bound to have an answer pretty quick.



Diffident said:
Hi OHM,

Thanks for your response.

Here is what I am trying to do (in C#):

=====

ThreadStart t = new ThreadStart(LongDBProcess)
// LongDBProcess is a time-consuming process
Thread ts = new Thread(t);
t.start(); //At this point, system thread will be created and not
the CLR thread

====

I need to have access to Session variables inside my LongDBProcess...

private void LongDBProcess()
{
Session["IDCounter"] = i+1; //At this point, I am getting
null
reference
}

If I am correct, the thread is not able to access the session. Probably
this
thread's scope is outside the Application Domain whereas the session data
will be inside the Application Domain...am I correct?

Thanks for your pointers.

OHM said:
This example ( albiet in Visual Basic.NET ) seems to work ok. Im not sure
what you are doing differently , or if I have misunderstood you ?

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim myThread As New Threading.Thread(AddressOf mySpawned)

Session("TestMe") = "Hello World"

myThread.Start()

End Sub


Private Sub mySpawned()

Dim s As String = Session("TestMe")

End Sub
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,772
Messages
2,569,593
Members
45,109
Latest member
JanieMalco
Top