2011-03-28 3 views
0

저는 C# Outlook 통합을 통해 사용자 Outlook에서 상위 50 개의 전자 메일 (다른 전자 메일은 전자 메일로 보내지 않음)을 읽는 작은 wpf 응용 프로그램을 작성하고 있습니다.WPF Outlook 통합으로 인해 작업이 실패했습니다.

내 응용 프로그램 UI가 반응하도록하려면 MAPI 연결을 설정하고 백그라운드 작업자에게서받은 편지함 폴더를 읽는 중입니다.

모든 것이 제대로 작동하지만 일부 사용자의 경우 무작위로 예외가 발생합니다.

The operation failed. 
    at Microsoft.Office.Interop.Outlook._MailItem.get_SenderName() 
    at WPFapplication.WPFOutlookView.OutlookMailItem..ctor(MailItem item) 
    at WPFapplication.WPFOutlookView._getEmailsBackgroundWorker_DoWork 
      (Object sender, DoWorkEventArgs e) 

이 예외는 매우 무작위로 발생하며 개발 컴퓨터에서 재현 할 수 없습니다.

  1. WPF 앱에서 Outlook 연결을 설정하기 위해 백그라운드 작업자를 사용할 수 있습니까? (Outlook OOM 호출을 모든 Outlook에서 제안하는 일부 온라인 게시물은 Outlook 기본 스레드에서 발생해야합니다.)

  2. 그렇다면 일부 사용자 컴퓨터가 없을 때 내 응용 프로그램을 응답 가능하게 만들려면 어떻게해야합니까? 모든 Outlook 프로필 설정 또는 사용자가 암호를 입력하기를 기다리고 있습니까?

업데이트 : 무인 이메일을 가져 오지려고하고 있지 않다 , 그냥 내가 필요 내 응용 프로그램은 UI를로드해야하며 사용자가 credetials를 입력 할 때 이메일을 가져 오지 기다릴 수있는 사용자 입력에 관계없이입니다. UI 스레드에서 OOM을 호출하면 사용자가 자격 증명을 입력 할 때까지 응용 프로그램의 전체 UI가 렌더링되지 않습니다. 이것이 백그라운드 작업자에서 OOM을 호출하는 주된 이유입니다. 내 응용 프로그램은 간단합니다 1. wpf보기와 사용자가 새 전자 메일을받을 때마다 상위 20 개의 전자 메일 및 업데이트를 표시하는 목록 상자. 내 구현은 WPF 뷰에 OOM을 호출하고 전자 메일을 받고 목록을 업데이트하는 백그라운드 작업자가 있으며이 목록은 목록 상자에 바인딩되어 있습니다. 여기에 어떤 변화가 있었습니까? 귀하의 질문에 대한 더 나은보기를 얻을 우리에게 정확한 예외를 얻기 위하여

+0

내가 EXEption 메시지를 자른 것 같아요. –

+0

@ user680370 : 답을 편집하려고하지 마십시오. 그 이유는 다음과 같습니다. – Wrikken

답변

0

이 문제에 대한 해결책을 찾았습니다. 스레딩이나 배경 작업자와 관련이 없습니다. Actuall 문제는 사용자가 동일한 Outlook 프로필로 2 대의 시스템을 설정했기 때문에 동기화에 약간의 시간이 걸렸습니다. 이 때문에 나는 다른 컴퓨터에서 동일한 이메일을 삭제하는 폴더 및 사용자의 전자 메일을 읽으려고 할 때 "작업에 실패했습니다"예외가 발생합니다. 해결 방법은 전자 메일 속성을 읽고 나머지 전자 메일을 계속 진행하면서 com 예외를 처리하는 것입니다. 도와 주셔서 감사합니다.

0

...

답변 :

1) 네, 적용합니다. OOM은 STA입니다.

2)이 사실을 알 수 없습니다. 이 응용 프로그램을 Outlook없이 실행하려면 OOM 코드를 실행하기 위해 Outlook이 컴퓨터에 설치되어 있는지 확인하십시오. 또한 OOM은 Outlook 프로필 설정/사용자가 암호 입력을 기다리지 않고 무인 모드로 작업하기에 적합하지 않습니다. 그것은 OOM의 디자인 제한입니다.

희망이 도움이됩니다.

+0

1. 배경을 사용하여 독립 실행 형 WPF 앱에서도 OOM을 호출 할 수 있습니까? 2. 일부 사용자는 Outlook이 설치되어 있지만 프로필이 설정되어 있지 않기 때문에 배경 작업자를 주로 사용하고 있습니다.내 가까운 응용 프로그램이나 프로필이 설치 될 때까지 내 응용 프로그램이 멈추는 것을 원하지 않습니다. 일부 사용자는 오랜 시간 동안 암호를 입력하지 않으며 응용 프로그램은 입력과 관계없이 렌더링하지 않습니다. 모든 코드 샘플이 appriciated됩니다. – user680370

+0

나는 다시 같은 것을 반복한다 - OOM과 함께 쓰레딩을 시도하지 말라. 그것은 그렇게 작동하도록 설계되지 않았습니다. 또한 네트워크 응용 프로그램을 사용해도 암호/사용자 ID를 입력하라는 동일한 보고서를 받게됩니다. 다시 OOM에서는 불가능합니다. 시도해 본다면 pls하지 말고 OOM은 무인 모드/네트워크/예약 된 서비스에서 작동하도록 호환되지 않습니다. 이러한 응용 프로그램을 사용하려면 MAPI (확장 MAPI/C++/비 관리 코드)를 사용해보십시오. 그러나 .NET Framework 기반 응용 프로그램 (관리되는 코드)과 호환되지 않습니다. – Deva

+0

@ dpideva1 전자 메일을 무인으로 보내려고하지 않고 있습니다. 사용자 입력에 관계없이 응용 프로그램의 UI를로드해야하며 사용자가 신택스를 입력 할 때 전자 메일을 받기까지 기다려야합니다. UI 스레드에서 OOM을 호출하면 사용자가 자격 증명을 입력 할 때까지 응용 프로그램의 전체 UI가 렌더링되지 않습니다. 이것이 백그라운드 작업자에서 OOM을 호출하는 주된 이유입니다. – user680370

관련 문제