Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Citrix上执行时,mailItem上的SetProperty/GetProperty无法按预期工作_C#_Outlook_Vsto_Outlook Addin_Citrix - Fatal编程技术网

C# 在Citrix上执行时,mailItem上的SetProperty/GetProperty无法按预期工作

C# 在Citrix上执行时,mailItem上的SetProperty/GetProperty无法按预期工作,c#,outlook,vsto,outlook-addin,citrix,C#,Outlook,Vsto,Outlook Addin,Citrix,我有一个Outlook VSTO插件 我使用mailItem.PropertyAccessor.SetProperty()和mailItem.PropertyAccessor.GetProperty()来保存和检索有关邮件项目的一些信息。它工作得很好 但是,当在Citrix环境上执行(并且仅当)时,SetProperty不会抛出任何错误,并且GetProperty的行为就像不存在任何属性一样。所以我没有任何错误 知道如何解决此问题吗?如果仅用于内部目的,而不需要保存,请不要设置属性-这可能会造成

我有一个Outlook VSTO插件

我使用
mailItem.PropertyAccessor.SetProperty
()和
mailItem.PropertyAccessor.GetProperty
()来保存和检索有关邮件项目的一些信息。它工作得很好

但是,当在Citrix环境上执行(并且仅当)时,
SetProperty
不会抛出任何错误,并且
GetProperty
的行为就像不存在任何属性一样。所以我没有任何错误


知道如何解决此问题吗?

如果仅用于内部目的,而不需要保存,请不要设置属性-这可能会造成不良影响:项目变脏,浪费属性映射(每个邮箱最多可以有0xFFFF命名属性-一旦达到限制,邮箱几乎死机)


创建一个包装类,将
MailItem
对象作为属性以及一个列表、一个字典或一组显式属性来保存每个项目的临时数据。

因此GetProperty总是抛出异常?
GetProperty
抛出异常,就像未使用
SetProperty
一样(默认行为是在未设置的情况下抛出,并捕获以将其视为默认)您真的可以在OutlookSpy中看到属性吗(-单击IMessage按钮)?另外,您是否记得调用MailItem。调用SetProperty后保存?实际上,我不想保存邮件项目(因为它会将其保存为草稿)。在其他环境中(这不使用Citrix),它工作得很好。我在某处看到,这可能是因为使用了Exchange缓存模式,但还不确定是否使用了它。我将深入研究这一线索。它似乎过于复杂,因为这个包装类应该处理邮件项的生命周期(创建和删除)为了避免内存泄漏。除此之外,即使我不需要对这些属性进行“冷保存”,我也不能100%确定MailItem引用不会改变uppon的使用情况(如果用户隔离窗口,或者用户总是发现的任何其他用例…),关于0xFFFF(65536)限制,我认为我们离这真的很远:-)我设法解决了这个问题,使用了一个受您启发的解决方案,使用了一个包含我所有属性的静态
条件weaktable mailItemsProperties
。通过弱引用管理mailItems生命周期的
条件weaktable
。谢谢!