2015-08-11 23 views
7

Tôi hiện đang làm việc theo số Bổ trợ C# .NET cho Microsoft Outlook. Mục tiêu của bổ trợ là, để nắm bắt đầu vào tìm kiếm từ Outlook Instant Search và hiển thị trong Ngăn tùy chỉnh kết quả tìm kiếm của riêng tôi.Cửa sổ gốc: Xử lý bản phát hành Đóng Đóng

Nó hoạt động khá tốt và với việc phân lớp cửa sổ Outlook với cửa sổ gốc, tôi nhận chuỗi tìm kiếm và nó đã chuyển chuỗi đó vào bảng điều khiển của tôi.

Vấn đề bây giờ là, khi bạn đóng Add-In (thông qua "File-> Options-> Add-Ins-> COM Add-Ins", nhưng không với X trong cửa sổ) , Add-In bị chấm dứt ngay lập tức và tôi không thể gọi searchboxWindow.ReleaseHandle() trước để khôi phục chuỗi WndProc của tôi. Outlook chỉ đơn giản là treo mà không có bất kỳ lỗi nhìn thấy được.

protected override void WndProc(ref Message m) 
{ 
    base.WndProc(ref m); 

    switch ((uint)m.Msg) 
    { 
     case WindowMessages.WM_DESTROY: 
     case WindowMessages.WM_QUIT: 
     case WindowMessages.WM_NCDESTROY: 
      this.ReleaseHandle(); 
      return; 

     case WindowMessages.WM_KEYUP: 
     case WindowMessages.WM_LBUTTONDOWN: 
     case WindowMessages.WM_RBUTTONDOWN: 
      OnKeyUp(); 
      break; 

     case WindowMessages.WM_EXITSIZEMOVE: 
      OnResize(); 
      break; 
    } 
} 

Tôi đã cố gắng nghe một vài thông báo cửa sổ nên được gọi khi bổ trợ bị đóng, nhưng những thông báo này chỉ xuất hiện khi tôi đóng Outlook theo cách thông thường.

Ngoài ra, các sự kiện trong tệp nguồn Add-In chính như AppDomain.CurrentDomain.ProcessExit, this.Shutdown hoặc ((Outlook.ApplicationEvents_10_Event)this.Application).Quit không được gọi.

Tôi có thể nghe sự kiện nào trên đó (đáng tin cậy) khi Add-In bị chấm dứt? Có một số? Nếu không, lựa chọn thay thế nào để giải quyết vấn đề của tôi?

+0

Bạn đã thử Dipose() và đính kèm một phương thức vào sự kiện được nhúng để đảm bảo sự kiện đã thực sự được xử lý? –

+0

Tôi đã triển khai giao diện IDisposable và được gọi là ReleaseHandle() trong đó, nhưng nó không có hiệu lực? Đó có phải là ý bạn không? –

+3

Sử dụng sự kiện Tắt của tiện ích bổ sung để hủy phân lớp cửa sổ. Trình xử lý sự kiện ThisAddIn_Shutdown() được tạo tự động này có ngôn ngữ đáng sợ nhưng nó vẫn được nêu ra trong trường hợp cụ thể này. –

Trả lời

1

SOLVED: Nhờ Hans passant

Nó thực sự có vẻ như sự kiện ThisAddIn_Shutdown được kích hoạt khi Add-In là tự ngắt kết nối thông qua COM Add-ins hộp thoại.

0

Tôi không nghĩ rằng bạn có thể làm được nhiều trong mã được quản lý. Mã không bị hư hại sẽ hoạt động tốt; hệ thống COM sẽ yêu cầu bạn lịch sự cho dù dll của bạn có thể được dỡ bỏ bằng cách gọi thực hiện của bạn DllCanUnload.

+0

Vì vậy, cơ bản tôi không thể làm bất cứ điều gì cho đến khi tôi viết lại dự án của tôi trong c + + hoặc tương tự? –

+0

Tôi không thể nghĩ ra cách để thực hiện điều đó trong mã được quản lý. –

Các vấn đề liên quan