jjacksn
asked on
URGENT: Problem with Multi Threading
I am running the following code:
//this.BeginInvoke(m_Deleg ateReload, null);
ThreadStart start = new ThreadStart(ReloadDataHelp er);
Thread t = new Thread(start);
t.IsBackground = true;
t.Start();
But, it is not dying when the calling thread, the main GUI, exits. I am calling Application.Exit() and then getting an error from the ReloadDataHelper because it is trying to populate a list view that does not exist. can someone help?
//this.BeginInvoke(m_Deleg
ThreadStart start = new ThreadStart(ReloadDataHelp
Thread t = new Thread(start);
t.IsBackground = true;
t.Start();
But, it is not dying when the calling thread, the main GUI, exits. I am calling Application.Exit() and then getting an error from the ReloadDataHelper because it is trying to populate a list view that does not exist. can someone help?
Sorry, didn't read it all...
private Thread t;
t = new Thread(new ThreadStart(ReloadDataHelp er));
t.IsBackground = true;
t.Start();
in the Form_Closing event:
if (t != null && t.IsAlive) t.Abort();
Hope this helps.
private Thread t;
t = new Thread(new ThreadStart(ReloadDataHelp
t.IsBackground = true;
t.Start();
in the Form_Closing event:
if (t != null && t.IsAlive) t.Abort();
Hope this helps.
Are there any other threads that are foreground which might still be running ?? your original code looks like it should work in the way you want
from MSDN.
"a background thread will not keep the managed execution environment alive. Once all foreground threads have been stopped in a managed process (where the .exe file is a managed assembly), the system stops all background threads and shuts down."
Is the exe a managed assembly??
Smg.
from MSDN.
"a background thread will not keep the managed execution environment alive. Once all foreground threads have been stopped in a managed process (where the .exe file is a managed assembly), the system stops all background threads and shuts down."
Is the exe a managed assembly??
Smg.
ASKER
I don't think so. Every thread I start in my program is run as a background thread. There are multiple background threads running...
These is a different question, but maybe you can help here. Whenever I go to file->exit my application closes. But sometime, the X button doesn't work. Why would it sometimes not work to close the application?
These is a different question, but maybe you can help here. Whenever I go to file->exit my application closes. But sometime, the X button doesn't work. Why would it sometimes not work to close the application?
Because some theard is still running, At least that is what happend to me...
ASKER
is there a way to force the X button to Call Application.Exit()? How can I add a handler to it. Adding to close or closing does not work, obviously, since the form is not closing when that button is clicked.
I had this problem a while back, and it was due to a timer on the form which was still active.
ASKER
I do have background threads running, I would just like them to die (I"m mean). So how can I add a handler to the X button?
The forms Closing event!
Check if the threads are running or not with Thread.IsAlive, so if it is alive, then do a Thread.Abort() to terminate the thread
Check if the threads are running or not with Thread.IsAlive, so if it is alive, then do a Thread.Abort() to terminate the thread
Your threads will die. The problem seems more to be that the thread is trying to access some GUI component (which a thread should not do anyways) and this leads to an exception...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Note: you'd need to synchronize the ArrayList or you may get strange results...
I've never had any problems.
ThreadStart start = new ThreadStart(ReloadDataHelp
start.IsBackground = true;
start.Start();