gpt4 book ai didi

c# - VSTO WPF Outlook 插件 - 随机情况下无响应的用户界面

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:43 24 4
gpt4 key购买 nike

我们有一个使用 .Net 4.0 WPF 开发的适用于 Outlook 2007 的 VSTO 插件。部署它的其中一台 PC 出现 UI 问题。在某些情况下,用户界面会在几分钟内变得无响应。点击不起作用。片刻之后一切恢复正常,用户可以单击按钮。安装在 PC 上的其他插件是 - SnagIT 和 Google 桌面 Outlook 工具栏。

如果您对此类问题有任何意见,请帮助我们。

最佳答案

我在使用 Word 加载项时遇到了同样的问题——在一个非常强大的开发者盒子上——即使我在后台完成所有工作,用户界面也会锁定。

我的理论是,即使我从后台线程等调用它,Word 也在 UI 线程上工作。

我尝试了一个实验——在新线程上实例化 Window 对象(即,这样我的 UI 线程与 Word 的工作线程不是同一个线程)——它成功了。我的 UI 不再随机锁定。

在您的线程关闭之前小心去除任何 COM 对象的实例,尤其要小心跨线程 COM 访问(在访问其任何 RCW 时可能使用 Dispatcher.Invoke 回到 Office 主机应用程序的线程... -- 调度器与它们被实例化的线程相关联,因此您只需在办公室主机应用程序的回调中实例化一个调度器,等等...)

注意:如果您将 Dispatcher.Invoke 返回到调用线程,则不能使用 Thread.Join,如下所示。 (在这种情况下,您需要在繁忙的循环中处理应用程序事件、Thread.Sleep 和 Thread.Yield)。否则,您将陷入僵局。

这是我正在做的事情的通用示例版本:

// This approach makes WPF Windows an order of magnitude more responsive
Thread t = new Thread(() =>
{
try
{
// Implement the IDisposable pattern on your window to release
// any resources before the thread exits
using (var myWindow = new MyWindow())
{
// Do any other pre-display initialization with the myWindow
// object here...

myWindow.ShowDialog();
}
}
finally
{
// Strongly Recommended (not doing this may cause
// weird exceptions at application shutdown):
Dispatcher.CurrentDispatcher.InvokeShutdown();
}
});

t.SetApartmentState(ApartmentState.STA); // Required
t.IsBackground = false; // Recommended

t.Start(); // Kicks off the new UI thread
t.Join(); // Blocks execution until the new UI thread has finished executing...

关于c# - VSTO WPF Outlook 插件 - 随机情况下无响应的用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8237394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com