我正在編寫使用第三方庫處理某些數據的應用程序。在非常簡單的例子,我有運行作爲這樣的任務的方法:阻止代碼並等待事件處理程序觸發?
private void ProcessListOfItems(List<string> items)
{
while (items.Count > 0)
{
3rdPartyLibObject.Process(items[0]);
items.Remove(0);
}
}
正如你看到的,我的代碼目前正在編寫方式,我從列表中儘快刪除每個項目的工藝路線()方法返回。但是,某件物品的處理可能會失敗,我需要知道這是否會發生。不幸的是,Process()方法不會返回一個bool值來指示該項目是否成功處理,而是會觸發ProcessingComplete和ProcessingFailed事件。我迷上了這些事件,這樣的事件處理程序:
3rdPartyLibObject.ProcessingComplete += obj_ProcessingSuccess;
3rdPartyLibObject.ProcessingFailed += obj_ProcessingFailed;
private void obj_ProcessingSuccess(object sender, 3rdPartyLibObject.ProcessingEventArgs e)
{
this.Invoke(new ProcessedHandler(OnProcessed), new object[] { true });
}
private void obj_ProcessingFailed(object sender, 3rdPartyLibObject.ProcessingEventArgs e)
{
this.Invoke(new ProcessedHandler(OnProcessed), new object[] { false });
}
private void OnProcessed(bool success)
{
if (success)
{
Debug.WriteLine("Item was processed succesfully!");
}
else
{
Debug.WriteLine("Failed to process item!");
}
}
我想什麼做的是有我的代碼塊中調用3rdPartyLibObject.Process(後右),直至事件處理程序火災這樣的一個我知道該項目是否無法處理(以及我是否應該從列表中刪除它)。我猜這可能不是一個不常見的情況,但我從來沒有遇到過它。處理這種情況有沒有普遍認同的最佳做法?
爲什麼不將您的物品刪除代碼添加到OnProcessed方法中?顯然這需要跟蹤哪個項目正在處理,但這是我能看到的最簡單的解決方案。 –
班上的布爾場無法解決。 –