【发布时间】:2012-10-15 17:07:49
【问题描述】:
我正在编写一个使用 3rd 方库来处理一些数据的应用程序。在一个非常简化的示例中,我有一个方法作为这样的任务运行:
private void ProcessListOfItems(List<string> items)
{
while (items.Count > 0)
{
3rdPartyLibObject.Process(items[0]);
items.Remove(0);
}
}
如您所见,按照我当前编写代码的方式,我会在 Process() 方法返回后立即从列表中删除每个项目。但是一个项目的处理可能会失败,我需要知道是否会发生这种情况。不幸的是,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 方法中?显然,这需要跟踪当前正在处理的项目,但这是我能看到的最简单的解决方案。
-
没有什么是您班级中的 bool 字段无法解决的问题。
标签: c# .net events event-handling blocking