这是一个关于在等待事件时保持 C# 线程处于活动状态的问题。
我正在编写一个 C# 应用程序,它将启动一个 Outlook 实例(或者如果有一个活动的实例,则重新使用任何现有实例),创建一个邮件项并显示它,然后等待邮件项的关闭事件或发送事件。
该应用程序不是在 Outlook 内部运行的加载项,而是从 Outlook 外部执行以创建 Outlook 实例和邮件项。
由于我的应用程序不是从 Outlook 的 gui 内运行,而是启动 Outlook 的 gui,因此我需要以某种方式保持我的进程处于活动状态,直到收到事件(发送或关闭)。如果我的应用程序在显示 Outlook 消息后返回并死亡,我的事件处理程序也将死亡。
问题: 我应该如何在等待事件时让应用程序保持活动状态?
由于我的线程是创建邮件项并将其显示在 Outlook 窗口中的线程,我的线程是否负责不阻止可能的消息传递到 Outlook 窗口?
我的想法是有一个看起来像这样的方法来在等待时保持进程活着
while(!MailClosed){
lock(mailLock){
Monitor.Wait(mailLock);
}
}
Run Code Online (Sandbox Code Playgroud)
然后让 send 和 close 的事件处理程序在处理完事件后调用另一个方法来唤醒服务员
private void SignalClose(){
lock(mailLock){
MailClosed = true;
Monitor.Pulse(mailLock);
}
}
Run Code Online (Sandbox Code Playgroud)
这样做会阻止可能的消息被传递到保存我的邮件项目的 Outlook 窗口吗?有没有人有更好的解决方案来处理这种情况?
我正在努力创建Word 2010插件并创建一个Windows安装程序包来部署插件.插件的目标框架是.NET 3.5.
根据我从Microsoft阅读部署指南时的理解,.NET 3.5的VSTO运行时与Office 2010一起安装.
这是否意味着我可以假设只要在目标计算机上安装Word 2010,.NET 3.5的VSTO运行时还会出席吗?
http://msdn.microsoft.com/en-us/library/ff937654.aspx
另一个问题我担心我应该参考哪个版本的vsto.
通过上面的链接提供的部署示例代码引用了一个程序集,我假设(版本是9,而不是我期望的4)是针对.NET 3.5的VSTO 2010的一部分
Program Files\Reference Assemblies\Microsoft\VSTO\v9.0\ Microsoft.Office.Tools.v9.0.dll
但是当我在示例中检查安装程序的启动条件时,它会通过检查密钥中的版本字符串来搜索VSTO 2010 Runtime
HKLM\Software\Microsoft\VSTO Runtime Setup\V4R
或
HKLM\Software\Microsoft\VSTO Runtime Setup\V4
但是引用的程序集在文件夹路径中有v9.0,这让我觉得它们会匹配
HKLM\Software\Microsoft\VSTO Runtime Setup\V9.0.21022 or V9.0.30729
我是否仍然可以使用v4,即使我在参考我使用v9的程序集时,或者我在这里混合了什么?
我正在使用C#和Microsoft.Office.Interop.Word执行以下操作
如果使用此方法打开文档(其中FileName是文件名,AddToRecentFiles为false且所有其他均为Missing.Value),则此方法可以正常工作
Document Open(
[In] ref object FileName,
[In, Optional] ref object ConfirmConversions,
[In, Optional] ref object ReadOnly,
[In, Optional] ref object AddToRecentFiles,
[In, Optional] ref object PasswordDocument,
[In, Optional] ref object PasswordTemplate,
[In, Optional] ref object Revert,
[In, Optional] ref object WritePasswordDocument,
[In, Optional] ref object WritePasswordTemplate,
[In, Optional] ref object Format,
[In, Optional] ref object Encoding,
[In, Optional] ref object Visible,
[In, Optional] ref object OpenAndRepair,
[In, Optional] ref object DocumentDirection,
[In, Optional] ref object …Run Code Online (Sandbox Code Playgroud)