Access Control In a Form From Library Function on Worker Thread

J

joey.powell

I have a windows forms app with a statusbar. In the form's code, I use
a delegates and spawn a worker thread to get processing off of the GUI
thread. Then in the worker thread I access a function in a library
file. The function needs to be able to update some of the forms status
bar panels. I have had great success in doing the following...

Invoke(new UpdateStatusDelegate(this.UpdateStatus), new object[] { "My
Message" });


BUT, it doesn't work from the function in the library file. I have
gotten it down to two error messages on compile:


1. The name 'Invoke' does not exist in the current context
2. An object reference is required for the nonstatic field, method, or
property 'MyNamespace._MyFormInstance.UpdateStatus(string)'


First, I do not understand why the first error message is occurring. I
have all "using" statements in the library file set to the same as in
the form's code file. I am missing something, somewhere.


Second, I can see why the second message is occurring. The calling form

instance is non-static. But this doesn't cause any problem when using
the code snippet in the form's code file.


Any suggestions?
 
B

Bob Powell [MVP]

I suspect that you've made the handler, from which you invoke the call, a
static method.. Therefore in that context there is no "this."

The thread's event handler should have an instance of the form, check to see
if invoke is required (it normally is but you never know) and invoke the
method directly from the handler.
--
Bob Powell [MVP]
Visual C#, System.Drawing

Ramuseco Limited .NET consulting
http://www.ramuseco.com

Find great Windows Forms articles in Windows Forms Tips and Tricks
http://www.bobpowell.net/tipstricks.htm

Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/faqmain.htm

All new articles provide code in C# and VB.NET.
Subscribe to the RSS feeds provided and never miss a new article.
 
J

joey.powell

Bob, I'm sorry but I don't quite understand. The worker thread was
spawned in the form's code file, and then there it calls a function in
a different library (.cs file). As far as I can tell, there is no
"handle" to grab from within the library file. I have used...

MyNameSpace.MyFormName.ActiveForm.Invoke to get rid of the Invoke error
message, but I still can't compile because of the second error message,
and so I don't know if that worked.
 

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

Top