A
amdrit
I am prototyping a TaskTray application and am having a problem displaying a
form from my workflow.
I have an ApplicationContext class that I use to manage my workflow and to
display my forms. The application connects to a socket server that then
requests my application to display a form. This form has a webbrowser
control on it.
When I attempt to display this form, I receive an error:
A first chance exception of type 'System.Threading.ThreadStateException'
occurred in System.Windows.Forms.dll
System.Threading.ThreadStateException: ActiveX control
'8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the
current thread is not in a single-threaded apartment.
I have legacy ActiveX conrtols that I also need to display on this form once
I have this corrected. Does anyone know how to work around this issue? Do
I have to invoke the form, I wouldn't even know how to test for
InvokeRequired or even implement a delegate to show this form? How do I get
back to the main thread to execute this code?
Note: When I attempt to display the same form from a menu item click event
(Accessed from the TaskTray Icon), it loads with no issue.
Here is my code to generate the issue:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApplicationContext());
}
public class MyApplicationContext : ApplicationContext
{
//Called from socket client
private void ProcessCommand(byte[] data)
{
Envelope stamp = DeserializeEnvelope(data);
switch (stamp.MessageType)
{
case MessageType.ShowForm:
ShowForm((FormData)stamp.Data);
break;
}
}
void ShowForm(FormData data)
{
frmToShow f = new frmToShow();
f.Data = data;
f.Show();
}
}
form from my workflow.
I have an ApplicationContext class that I use to manage my workflow and to
display my forms. The application connects to a socket server that then
requests my application to display a form. This form has a webbrowser
control on it.
When I attempt to display this form, I receive an error:
A first chance exception of type 'System.Threading.ThreadStateException'
occurred in System.Windows.Forms.dll
System.Threading.ThreadStateException: ActiveX control
'8856f961-340a-11d0-a96b-00c04fd705a2' cannot be instantiated because the
current thread is not in a single-threaded apartment.
I have legacy ActiveX conrtols that I also need to display on this form once
I have this corrected. Does anyone know how to work around this issue? Do
I have to invoke the form, I wouldn't even know how to test for
InvokeRequired or even implement a delegate to show this form? How do I get
back to the main thread to execute this code?
Note: When I attempt to display the same form from a menu item click event
(Accessed from the TaskTray Icon), it loads with no issue.
Here is my code to generate the issue:
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyApplicationContext());
}
public class MyApplicationContext : ApplicationContext
{
//Called from socket client
private void ProcessCommand(byte[] data)
{
Envelope stamp = DeserializeEnvelope(data);
switch (stamp.MessageType)
{
case MessageType.ShowForm:
ShowForm((FormData)stamp.Data);
break;
}
}
void ShowForm(FormData data)
{
frmToShow f = new frmToShow();
f.Data = data;
f.Show();
}
}