特别是,我必须以最快、最可靠的方式从Lotus Notes文件中提取所有邮件和附件。另一点可能相关的是,我需要从辅助线程执行此操作。
编辑
谢谢你的回答--这两个答案都很好。我应该提供更多的背景信息。
我们目前有一个WinForms应用程序,它有一个使用Notes COM API的后台线程。
然而,它似乎并不稳定。(当然,这可能是我们做错了什么。)例如,我们发现必须在主线程上预初始化Notes session,否则在后台线程上对session.CreateDXLExporter()的调用会抛出异常。
发布于 2010-07-17 01:19:24
我真的很讨厌那个NotesSession COM对象。
除了初始化它的线程之外,您不能在其他线程中使用它。.NET中的线程是纤程,真正的底层线程随时可能改变。
因此,我建议这样使用它,在using块中:
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()
那些是你的朋友。
干杯!
发布于 2008-10-22 16:06:40
Lotus Notes COM Api参考资料可以在here中找到
要在VB.Net中获取Notes会话(起始点),您可以使用:
Dim oSess As Object = Nothing
oSess = CreateObject("Notes.NotesSession")
我通常用C#编程,因为要用COM操作,我更喜欢VB.Net
最好从同一线程访问所有COM服务器,除非您确定这不会造成任何麻烦。
发布于 2008-09-05 02:42:11
https://stackoverflow.com/questions/45132
复制相似问题