2011-02-07 47 views
3

以下是我的...以編程方式監視Exchange收件箱和打印標籤

我有一個跟蹤條碼類型標籤的程序。我可以選擇數據庫中的一個項目併爲其打印標籤。我添加了將電子郵件發送到Exchange服務器(2007 SP1)上的特定收件箱並在主題行中輸入項目ID的功能,然後使用該ID打印標籤。到目前爲止,我可以從Exchange中讀取並提取ID號,然後將其發送到報告並將報告打印出來。我被卡住的地方是監控收件箱。如何讓readEmail()方法自動啓動?沒有事件可以做到這一點。我必須讓它自己檢查收件箱。這個想法是如此,如果我們需要打印標籤,我們可以發送一封電子郵件到這個收件箱,標籤會自動打印。只有一個人可以打印這些,如果他不在這裏,並且有人需要標籤,這可以讓他發送電子郵件並打印標籤。

private void readEmail() 
{ 
    ExchangeService _mailService = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
    _mailService.UseDefaultCredentials = true; 
    _mailService.Url = new Uri("https://webmail.mydomain.com/ews/exchange.asmx"); 

    try 
    { 
    ItemView allItems = new ItemView(100); 
    SearchFilter searchFilterInbox = new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false); 
    Folder _inbox = Folder.Bind(_mailService, WellKnownFolderName.Inbox); 

    if (_inbox.UnreadCount > 0) 
    { 
     FindItemsResults<Item> findResults = _inbox.FindItems(searchFilterInbox, allItems); 
     List<Item> resultItems = new List<Item>(); 
     foreach (Item item in findResults.Items) 
     { 
     resultItems.Add(item); 
     _mailService.LoadPropertiesForItems(resultItems, PropertySet.FirstClassProperties); 
     cboPropertyTag.Text = item.Subject; 
     GetReportVariables(); 
     reportType = "autoPrint"; 
     reportViewer rv = new reportViewer(); 
     rv.Show(); 
     item.Move(WellKnownFolderName.DeletedItems); 
     } 
    } 
    } 
    catch (ServiceVersionException) 
    { 
    } 
} 

在此先感謝!

保羅

回答

2

想到的第一個想法是一個System.Timers.Timer,定期執行readEmail()

另一種選擇是簡單地對每x分鐘運行一次的exe文件使用Scheduled Task並執行你的方法。

+1

謝謝。我添加了一個監視器對象,將其設置爲30秒(當我們運行時會使它更長),啓動它,當它運行時說,運行方法如上。我在開始時停止了計時器,並重置,然後在最後開始計時。問題是現在當我訪問窗體上的對象時,我得到一個交叉線程錯誤。所以我想弄清楚如何獲取數據,而不是依賴表單。 – 2011-02-07 23:23:49