コード例 #1
0
        private static void RunInWpfWindow(Action <DispatchWpfObject> action, out Exception uiThreadException, out Exception workerThreadException)
        {
            DispatchWpfObject window = null;

            Exception exception = null;

            workerThreadException = null;

            ManualResetEventSlim ready = new ManualResetEventSlim(false);

            Thread windowThread = new Thread(
                () =>
            {
                try
                {
                    window = new DispatchWpfObject(ready);
                    window.Show();
                    Dispatcher.Run();
                    Dispatcher.ExitAllFrames();
                }
                catch (Exception e)
                {
                    exception = e;
                    throw;
                }
            });

            windowThread.SetApartmentState(ApartmentState.STA);
            windowThread.Start();

            ready.Wait();
            ready.Reset();
            try
            {
                action(window);
            }
            catch (Exception e)
            {
                workerThreadException = e;
            }

            ready.Wait();
            Thread.Sleep(10);   // wait for exception

            window.Dispatcher.InvokeShutdown();

            windowThread.Join();

            uiThreadException = exception;
        }
コード例 #2
0
        private static void RunInWpfWindow(Action<DispatchWpfObject> action, out Exception uiThreadException, out Exception workerThreadException)
        {
            DispatchWpfObject window = null;

            Exception exception = null;

            workerThreadException = null;

            ManualResetEventSlim ready = new ManualResetEventSlim(false);

            Thread windowThread = new Thread(
                () =>
                {
                    try
                    {
                        window = new DispatchWpfObject(ready);
                        window.Show();
                        Dispatcher.Run();
                        Dispatcher.ExitAllFrames();
                    }
                    catch (Exception e)
                    {
                        exception = e;
                        throw;
                    }

                });

            windowThread.SetApartmentState(ApartmentState.STA);
            windowThread.Start();

            ready.Wait();
            ready.Reset();
            try
            {
                action(window);
            }
            catch ( Exception e )
            {
                workerThreadException = e;
            }

            ready.Wait();
            Thread.Sleep( 10 ); // wait for exception

            window.Dispatcher.InvokeShutdown();

            windowThread.Join();

            uiThreadException = exception;
        }