我正在尝试编写一个接收委托的方法,并在循环中执行该委托。这不是很难,例如:
public static void RunInLoop<T>(IEnumerable<T> someCollection,
Action<T> action)
{
foreach (var item in someCollection)
{
action(item);
}
}
但是,假设我想为用户提供RunInLoop
执行类似 的方法break
,即停止循环的执行(或者只是简单地从 中返回RunInLoop
)。
我想到了什么:
编写一个名为的方法
Break()
——它抛出一个(私有)异常,然后action(item)
用 try catch 包围,如果我捕获到我的(私有)异常——就返回。如果代表通过了 catchs ,这就不是很好了Exception
。foreach
在新线程中运行,并Break()
通过杀死当前线程来实现。除其他原因外,在基于 UI 的应用程序(如 Silverlight)中使用我的方法时,这并不好,有时必须在 UI 线程中执行。我得到的另一个建议是接收一个额外的代表,条件是我将在每次执行结束时检查。我也不喜欢这样,因为它对用户来说不直观,并且限制
break
在迭代结束。不过,这是我目前的最后手段。
所以我还没有找到好的解决方案。有什么建议/方向吗?