gpt4 book ai didi

c# - 从 C# 与 Lotus Notes 交互的最佳方式和推荐做法是什么

转载 作者:可可西里 更新时间:2023-11-01 03:09:16 25 4
gpt4 key购买 nike

特别是,我必须以最快和最可靠的方式从 Lotus Notes 文件中提取所有消息和附件。可能相关的另一点是我需要从辅助线程执行此操作。

编辑

感谢您的回答 - 两个都很好。我应该提供更多背景信息。

我们目前有一个 WinForms 应用程序,它有一个使用 Notes COM API 的后台线程。

不过好像不太稳定。 (当然可能是我们做错了什么。)例如,我们发现我们必须在主线程上预初始化 Notes session ,否则在后台线程上调用 session.CreateDXLExporter() 会引发异常。

最佳答案

我真的很讨厌那个 NotesSession COM 对象。

除了它被初始化的线程之外,你不能在另一个线程中使用它。.NET 中的线程是纤程,真正的底层线程随时可能发生变化。

所以我建议在 using block 中以这种方式使用它:

Imports Domino
Imports System.Threading

Public Class AffinitedSession
Implements IDisposable

Private _session As NotesSession
Public Sub New(ByVal pass As String)
Thread.BeginThreadAffinity()
_session = New NotesSession()
_session.Initialize(pass)
End Sub

Public ReadOnly Property NotesSession() As NotesSession
Get
Return _session
End Get
End Property

Private disposedValue As Boolean = False ' To detect redundant calls

' IDisposable
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: free other state (managed objects).
End If

' TODO: free your own state (unmanaged objects).
' TODO: set large fields to null.
_session = Nothing
Thread.EndThreadAffinity()
End If
Me.disposedValue = True
End Sub

#Region " IDisposable Support "
' This code added by Visual Basic to correctly implement the disposable pattern.
Public Sub Dispose() Implements IDisposable.Dispose
' Do not change this code. Put cleanup code in Dispose(ByVal disposing As Boolean) above.
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
#End Region

End Class

注意 Thread.BeginThreadAffinity() 和 Thread.EndThreadAffinity()

那些是你的 friend 。

干杯!

关于c# - 从 C# 与 Lotus Notes 交互的最佳方式和推荐做法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132/

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