Вот мои простые шаги, чтобы произвести мою проблему с ниже кодом ...VSTO: Outlook запрашивает 3 раза для «Сохранить изменения?» ... Зачем?
- Выполнить проект
- Создать новую почту
- Добавить attacment
- Закрыть почту - и я спросил первый время для сохранения изменений - я выбираю no
- Закрыть приложение Outlook - меня попросили два раза сохранить изменения ... почему?
Вот мой пример кода ...
Imports System.Runtime.InteropServices
Public Class ThisAddIn
Private Shared _currentMailItem As Outlook.MailItem
Private Sub ThisAddIn_Startup() Handles Me.Startup
AddHandler Me.Application.ItemLoad, AddressOf LoadMail
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Shared Sub LoadMail(Item As Object)
If TypeOf Item Is Outlook.MailItem Then
_currentMailItem = TryCast(Item, Outlook.MailItem)
AddHandler _currentMailItem.Open, AddressOf OpenMail
End If
End Sub
Private Shared Sub OpenMail(ByRef Cancel As Boolean)
If String.IsNullOrEmpty(_currentMailItem.EntryID) Then
AddHandler _currentMailItem.AttachmentAdd, AddressOf MailItem_AttachementAdded
AddHandler _currentMailItem.Close, AddressOf MailItem_Close
End If
End Sub
Private Shared Sub MailItem_AttachementAdded(e As Outlook.Attachment)
For Each a As Outlook.Attachment In _currentMailItem.Attachments
Next
End Sub
Private Shared Sub MailItem_Close(ByRef cancel As Boolean)
If String.IsNullOrEmpty(_currentMailItem.EntryID) Then
RemoveHandler _currentMailItem.AttachmentAdd, AddressOf MailItem_AttachementAdded
RemoveHandler _currentMailItem.Close, AddressOf MailItem_Close
End If
End Sub
End Class
Можете ли вы понять, почему он просит у меня дважды при закрытии приложения, чтобы сохранить изменения?
Кроме того, я не уверен, когда использовать Marshal.ReleaseComObject() - как в моем For Each a As Outlook.Attachment In _currentMailItem.Attachments
... do I Marshal.ReleaseComObject (a) в цикле?
Благодаря
UPDATE ....
Этот код по-прежнему не Eventhough Я пытаюсь освободить объекты ...
Imports System.Runtime.InteropServices
Public Class ThisAddIn
Private _currentMailItem As Outlook.MailItem
Private Sub ThisAddIn_Startup() Handles Me.Startup
AddHandler Me.Application.ItemLoad, AddressOf LoadMail
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Sub LoadMail(Item As Object)
If TypeOf Item Is Outlook.MailItem Then
_currentMailItem = TryCast(Item, Outlook.MailItem)
AddHandler _currentMailItem.Open, AddressOf OpenMail
End If
End Sub
Private Sub OpenMail(ByRef Cancel As Boolean)
If String.IsNullOrEmpty(_currentMailItem.EntryID) Then
AddHandler _currentMailItem.AttachmentAdd, AddressOf MailItem_AttachementAdded
AddHandler _currentMailItem.Close, AddressOf MailItem_Close
End If
End Sub
Private Sub MailItem_AttachementAdded(e As Outlook.Attachment)
For i As Integer = 0 To _currentMailItem.Attachments.Count - 1
Dim a As Outlook.Attachment = _currentMailItem.Attachments(i + 1)
Marshal.ReleaseComObject(a)
a = Nothing
Next
End Sub
Private Sub MailItem_Close(ByRef cancel As Boolean)
If String.IsNullOrEmpty(_currentMailItem.EntryID) Then
RemoveHandler _currentMailItem.AttachmentAdd, AddressOf MailItem_AttachementAdded
RemoveHandler _currentMailItem.Close, AddressOf MailItem_Close
End If
Marshal.ReleaseComObject(_currentMailItem)
_currentMailItem = Nothing
End Sub
End Class
Я попробовал обновить свой код с вашими предложениями, но он все еще не просил меня сохранять изменения 3 раза ... любую идею? – MojoDK
Где я могу увидеть обновленный код? –
В начальном посте (вверху) ... создан раздел «ОБНОВЛЕНИЕ». – MojoDK