Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2304
  • Last Modified:

Check is spawned thread is running

check is thread is still running

I have a class that is called from a page in a new thread and I have property on the class to check if the thread is still running.  Here is the scenario


I have a class ..................

public void work()
{
}



I have property on this class to check if a spawn thread is running

public static bool IsThreadRunning()
{
  lock (StillRunningLock)
  {
      isRunning = false;
      Thread.Sleep(2000);
      return isRunning;
  }
}


I have a method on the class that is called from an aspx page in a new thread.  I set the isrunning flag to true

public void dowork()
{
  isRunning = true;
}


I call the method from page

        var work = new work();        
        Thread newThread = new Thread(new ThreadStart(work.dowork()));
        newThread.Start();

I and redirect to a status page

     Response.Redirect("checkthreadstatus.aspx");

On status page I check the if thread is running by the property IsThreadRunning() like this

   work.IsThreadRunning()

But is always returning false even though I know that the thread is running - what is wrong with this?




0
mugsey
Asked:
mugsey
  • 6
  • 6
1 Solution
 
alb66Commented:
Instead of

work.IsThreadRunning()

you can use

newThread.ThreadState == ThreadState.Running
0
 
mugseyAuthor Commented:
I want to be able to call
   work.IsThreadRunning()
from anywhere in the asp.net application so I cannot use that suggestion thanks
0
 
alb66Commented:
>>>>>
public void dowork()
{
  isRunning = true;
}
>>>>>


I imagine that dowork() is a lenghty operation.

You need to do the assignment periodically:

public void dowork()
{
   for ( int ii=0; ii<200; ii++ )
   {
      isRunning = true;
      Thread.Sleep( 1000 );    <---- this should work
    }
}

public void dowork()
{
   for ( int ii=0; ii<200; ii++ )
   {
      isRunning = true;
      Thread.Sleep( 3000 );    <---- this doesn't work
    }
}

0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
alb66Commented:
You put all the IsThreadRunning() code in a lock block.
Is that lock used in the dowork() function?
0
 
mugseyAuthor Commented:
This is somebody elses code; I think it was to cater for the status page being accessed simultaneiously,
Yes it is used for the dowork function
0
 
mugseyAuthor Commented:
I did try Thread.Sleep( 1000 ) but is still does not work
0
 
alb66Commented:
>>>>> Yes it is used for the dowork function

So, maybe that when you call the IsThreadRunning() function the thread will be blocked until IsThreadRunning() is finished


>>>>> I did try Thread.Sleep( 1000 ) but is still does not work

I only write it as an example to say that you must assign isRunning = true at an interval time less then 2000, becuase in the IsThreadRunning function you test it after 2000 ms.
0
 
mugseyAuthor Commented:
OK thanks

Is there anyway you would suggest?
0
 
alb66Commented:
Can you post the dowork() code?
0
 
alb66Commented:
How is isRunning defined?
0
 
mugseyAuthor Commented:
In fact I did a page refresh on the status page and eventually it does work.  
So the problem is that when I do a response. redirect to the statuspage.

On page load I do

   work.IsThreadRunning()

if its true then display progress panel.

So the problem is here, once I do a page refresh after 30 secs or so it does work as expected.  Any suggestions on the page load?


0
 
mugseyAuthor Commented:
In fact can I get rid of thread.sleep ??
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 6
  • 6
Tackle projects and never again get stuck behind a technical roadblock.
Join Now