小编ice*_*all的帖子

WPF新窗口创建新线程错误

void itemCommand_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)
{
    var thread = new Thread(() =>
    {
    if (LoginCheck())
    {
        ItemWindow itw = new ItemWindow(); 
        //Dispatcher.CurrentDispatcher.Invoke((System.Action)(() =>
        //{
              itw.Show();
              itw.Closed += (sender2, e2) => { itw.Dispatcher.InvokeShutdown(); };
        //}));

        Dispatcher.Run();
     }
     });

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

}
Run Code Online (Sandbox Code Playgroud)

我一直收到错误消息"调用线程无法访问此对象,因为另一个线程拥有它." 在线"itw.show();" 当这个函数调用两次时.它适用于第一次调用,在窗口关闭并尝试再次打开后,它会失败.当我注释掉"Invoke"方法时,它也不适用于Dispatcher.请帮我找到解决方案.谢谢.

-----------------编辑

我正在创建一个新线程的原因是因为它是一个Excel插件.我不能从主线程创建窗口,如果我从主线程创建它,它是与窗口碰撞的excel.
我不明白的是,为什么新线程的新实例(ItemWindow)与旧线程冲突.

c# wpf multithreading excel-addins

8
推荐指数
1
解决办法
690
查看次数

标签 统计

c# ×1

excel-addins ×1

multithreading ×1

wpf ×1