1

ウィンドウ内のバックグラウンドで別のウィンドウを読み込もうとしています。私の場合、親ウィンドウはスプラッシュスクリーンとして機能します。

InitWindow I = null;
    public InitWindow()
    {
        InitializeComponent();
        I = this;

        Thread T = new Thread(() =>
        {
            MainWindow M = new MainWindow();
            M.Show();
            M.ContentRendered += M_ContentRendered;
            System.Windows.Threading.Dispatcher.Run();
            M.Closed += (s, e) => M.Dispatcher.InvokeShutdown();

        }) { IsBackground = true, Priority = ThreadPriority.Lowest };

        T.SetApartmentState(ApartmentState.STA);
        T.Start();
    }

    void M_ContentRendered(object sender, EventArgs e)
    {
        I.Close();
    }

他のすべては正常に機能しますが、次の場所で無効な操作の例外がスローされます。

I.Close();

別のスレッドがこのオブジェクトを所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません。

1) スレッドを切り替え/同期するにはどうすればよいですか?

2) より良い回避策はありますか?

4

1 に答える 1