PC Review
Forums
Newsgroups
Microsoft DotNet
Microsoft Dot NET Compact Framework
Raise event from library worker thread.
Forums
Newsgroups
Microsoft DotNet
Microsoft Dot NET Compact Framework
Raise event from library worker thread.
![]() |
Raise event from library worker thread. |
|
|
Thread Tools | Rate Thread |
|
|
#1 |
|
Guest
Posts: n/a
|
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 |
|
|
|
#2 |
|
Guest
Posts: n/a
|
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 |
|
|
|
#3 |
|
Guest
Posts: n/a
|
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 |
|
|
|
#4 |
|
Guest
Posts: n/a
|
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 |
|
![]() |
|
| Thread Tools | |
| Rate This Thread | |
|
|

Main Page 

