PC Review Forums Newsgroups Microsoft DotNet Microsoft Dot NET Compact Framework Raise event from library worker thread.

Reply

Raise event from library worker thread.

 
Thread Tools Rate Thread
Old 30-06-2003, 07:47 PM   #1
Johan
Guest
 
Posts: n/a
Default Raise event from library worker thread.


Hi!

I am writing a library in managed C++ for the .NET framework. I have
problems fireing events from a worker thread. The managed event must
be raised from the main thread, but I cannot find any way to pass
control from the worker thread to the main thread.

In the COM programming model the problem was solved by creating an
invisible window which the worker thread passed win32 messages to.
With what is that paradigm replaced in .NET?

I have found some solutions that involves the Control.Invoke method.
This approach works if you got access to the clients Form handle, but
since I am writing a library (and not a control) I don't now how to
get that. Instead I get this error message if a I let my class inherit
from Control and then call Invoke()

"An unhandled exception of type 'System.InvalidOperationException'
occurred in system.windows.forms.dll

Additional information: Cannot call Invoke or InvokeAsync on a control
until the window handle has been created."

Do anyone have the solution of how to raise events from a .NET
library's worker thread? I would be more than pleased if I anyone gave
me some key information!

Regards,
John
  Reply With Quote
Old 30-06-2003, 08:18 PM   #2
Alex Feinman [MVP]
Guest
 
Posts: n/a
Default Re: Raise event from library worker thread.

You can use MessageWindow class in a same way you used hidden window in COM

"Johan" <franson@hotmail.com> wrote in message
news:446a1750.0306300947.7c102862@posting.google.com...
> Hi!
>
> I am writing a library in managed C++ for the .NET framework. I have
> problems fireing events from a worker thread. The managed event must
> be raised from the main thread, but I cannot find any way to pass
> control from the worker thread to the main thread.
>
> In the COM programming model the problem was solved by creating an
> invisible window which the worker thread passed win32 messages to.
> With what is that paradigm replaced in .NET?
>
> I have found some solutions that involves the Control.Invoke method.
> This approach works if you got access to the clients Form handle, but
> since I am writing a library (and not a control) I don't now how to
> get that. Instead I get this error message if a I let my class inherit
> from Control and then call Invoke()
>
> "An unhandled exception of type 'System.InvalidOperationException'
> occurred in system.windows.forms.dll
>
> Additional information: Cannot call Invoke or InvokeAsync on a control
> until the window handle has been created."
>
> Do anyone have the solution of how to raise events from a .NET
> library's worker thread? I would be more than pleased if I anyone gave
> me some key information!
>
> Regards,
> John


  Reply With Quote
Old 07-07-2003, 11:53 PM   #3
Johan
Guest
 
Posts: n/a
Default Re: Raise event from library worker thread.

Thanks for your answer, but as I understand it MessageWindow is only
implemented in the Compact Framework and not the desktop framework. At
least the docs say so, and the postings from Microsoft staf in those
groups say so.

Any solution for .NET Desktop Framework?

Regards,
John

"Alex Feinman [MVP]" <public_news@alexfeinman.com> wrote in message news:<O5XtIQzPDHA.2852@tk2msftngp13.phx.gbl>...
> You can use MessageWindow class in a same way you used hidden window in COM
>
> "Johan" <franson@hotmail.com> wrote in message
> news:446a1750.0306300947.7c102862@posting.google.com...
> > Hi!
> >
> > I am writing a library in managed C++ for the .NET framework. I have
> > problems fireing events from a worker thread. The managed event must
> > be raised from the main thread, but I cannot find any way to pass
> > control from the worker thread to the main thread.
> >
> > In the COM programming model the problem was solved by creating an
> > invisible window which the worker thread passed win32 messages to.
> > With what is that paradigm replaced in .NET?
> >
> > I have found some solutions that involves the Control.Invoke method.
> > This approach works if you got access to the clients Form handle, but
> > since I am writing a library (and not a control) I don't now how to
> > get that. Instead I get this error message if a I let my class inherit
> > from Control and then call Invoke()
> >
> > "An unhandled exception of type 'System.InvalidOperationException'
> > occurred in system.windows.forms.dll
> >
> > Additional information: Cannot call Invoke or InvokeAsync on a control
> > until the window handle has been created."
> >
> > Do anyone have the solution of how to raise events from a .NET
> > library's worker thread? I would be more than pleased if I anyone gave
> > me some key information!
> >
> > Regards,
> > John

  Reply With Quote
Old 08-07-2003, 03:06 PM   #4
Maarten Struys
Guest
 
Posts: n/a
Default Re: Raise event from library worker thread.

One of the reasons Chris is talking about is undoubtfully the fact that
smart device development can only be done using C# and VB.NET, not with
managed C++. You might assume that the generated IL is the same, but the
..NET CF only exposes a subset of the methods of the full framework, so
undoubtfully you would run into problems if getting the library running at
all (I have to admit I never tried this, not even with a trivial library,
mainly since I don't have the need for it).


--
Regards,

Maarten Struys
PTS Software bv
----
"Johan" <franson@hotmail.com> wrote in message
news:446a1750.0307071407.73772ca7@posting.google.com...
> Chris,
>
> Why not list the reasons why this issue is "not relevant" to the
> compact framework. For me it is indeed relevant because I'm trying to
> find the best solution for both the compact and the desktop framework.
>
> Maybe those "several reasons" contains some good information. Share
> your knowledge instead of being slightly... ;-)
>
> /John
>
> "Chris Tacke, eMVP" <ctacke@spamfree-opennetcf.org> wrote in message

news:<eU4D5SzPDHA.3664@tk2msftngp13.phx.gbl>...
> > Quit posting to multiple groups. This is completely not relevant to the
> > Compact Framework for several reasons.
> >
> > --
> > Chris Tacke, eMVP
> > Advisory Board Member
> > www.OpenNETCF.org
> >
> >
> > "Johan" <franson@hotmail.com> wrote in message
> > news:446a1750.0306300947.7c102862@posting.google.com...
> > > Hi!
> > >
> > > I am writing a library in managed C++ for the .NET framework. I have
> > > problems fireing events from a worker thread. The managed event must
> > > be raised from the main thread, but I cannot find any way to pass
> > > control from the worker thread to the main thread.
> > >
> > > In the COM programming model the problem was solved by creating an
> > > invisible window which the worker thread passed win32 messages to.
> > > With what is that paradigm replaced in .NET?
> > >
> > > I have found some solutions that involves the Control.Invoke method.
> > > This approach works if you got access to the clients Form handle, but
> > > since I am writing a library (and not a control) I don't now how to
> > > get that. Instead I get this error message if a I let my class inherit
> > > from Control and then call Invoke()
> > >
> > > "An unhandled exception of type 'System.InvalidOperationException'
> > > occurred in system.windows.forms.dll
> > >
> > > Additional information: Cannot call Invoke or InvokeAsync on a control
> > > until the window handle has been created."
> > >
> > > Do anyone have the solution of how to raise events from a .NET
> > > library's worker thread? I would be more than pleased if I anyone gave
> > > me some key information!
> > >
> > > Regards,
> > > John



  Reply With Quote
Reply



Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off