TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
sam
NA
3
0
Backgroundworker Thread Being Starved
Oct 29 2008 4:42 PM
I am having some trouble with a backgroundworker ("bw'r" for short) being starved while the main thread is in a loop. I have tried a few different tricks to give the bw'r a few cpu cycles, but to no avail thus far. Below is a snippet explaining some of the setup.
Within the 'test()' function on the main thread I have tried a number of techniques to give some time to 'backgroundworker_DoWork()', but no matter what while test() is within its loop the bw'r does not seem to run. Within 'test()' I have tried different sleep values (0, 1, 250, 5000), taking the sleep out entirely, changing the bw'r to a normal thread and increasing its priority, and finally using DoEvents within 'test()'. Thus far only DoEvents has helped anything, but I have read that this is not a proper solution.
I have a guess that I need to add another bw'r to replace test() and notify the main form upon completion, however I also need to understand why the below scenario is not working. Am I missing some idiosyncrasy of threads and bw'rs? Note that there are a few more app's running around in my app, but the only time the bw'r freezes is during this function. Thanks.
// method main form application
void test()
{
// loop taking anywhere from 10 seconds to 10 minutes
while(!found)
{
// do work, look for results
Thread.Sleep(1); // sleep doesn't seem to help
// Application.DoEvents(); // only thing that seems to work
}
}
// separate thread using backgroundworker control
void backgroundworker_DoWork(....)
{
// loop taking approx 1.5 seconds to complete
while(true)
{
// communicate with h/w and update shared values
Thread.Sleep(1);
}
}
Reply
Answers (
0
)
Quicker way to make Silverlight animations!
threading problem