> I'm a C# newb and am trying to write a multithreaded app to free up my
> UI thread so that it can repaint the screen etc. The application does
[quoted text clipped - 5 lines]
> nothing and I am obviously not understanding something about the
> concept of the worker thread. Here is a snippet of my code.
Not really enough for me to say categorically what the problem is, but
if we look here:
[all fine so far - we have created a new thread to run this method]
> delegate void readLogDelegate(string parameter);
> private void readLogFile(string logFile)
[quoted text clipped - 6 lines]
>
> }
So dothework will be run on the new thread, which is correct, because
this is the worker thread, and we want to do the work :)
> private void dothework(string logFile)
> {
> MessageBox.Show(Thread.CurrentThread.Name); (The first time
> through this returns empty because I never set this new thread name,
> the second time through it is back to my inital "Main Thread")
> if (this.listView1.InvokeRequired) (This returns True the
> first time through but not the second)
[quoted text clipped - 16 lines]
>
> }
OK let's hold it right here. Why is the *worker* thread going to the UI
at this time? The code suggested to me that the 'work' was going to
involve reading a log file, but there isn't any of that here. You have
the concept of going to the UI thread with InvokeRequired and Invoke
when you want to update the UI, but that isn't what you should be doing
here - you should be doing 'the work' of reading the log file, and *when
that is done* (or when you have useful intermediate results), you can go
to the UI.
Have a method which takes actual results (the readings from the log
file, I suppose) and puts them in the UI. Put appropriate InvokeRequired
checks to make sure it only runs on the UI thread. Then call this method
from dothework when you actually have results.

Signature
Larry Lard
larrylard@googlemail.com
The address is real, but unread - please reply to the group
For VB and C# questions - tell us which version