I realized a WPF Control Library to use as an Addin in MS Office 2007.
The WPF-Class is instantiated by the host and creates a toolbar with some buttons in MS Office. By clicking a button the WPF window should appear. The problem is that I always receive the following error: "The calling thread must be STA, because many UI components require this." My main function is marked as [STAThread].
It seems that the button_Click event runs in an other thread than the UI thread.
I tried to use a dispatcher, but that didn't work.
Dispatcher.CurrentDispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
wpfform wf = new wpfform();
wf.ShowDialog();
));
I think the module gets a wrong dispatcher, but I don't know exactly.
Next I tried to start the window in an separate STA thread and join the thread, but this didn't work either. As I removed the [STAThread]
Attribute from the main function the window started, but i was unable to access office (because i'm in a separate thread).
Thread workerThread = new Thread(_ShowDialog);
workerThread.SetApartmentState(ApartmentState.STA);
workerThread.Start();
workerThread.Join();
Is it possible to determine the UI thread and create a dispatcher for this thread, or how can I come back to the UI thread?