问题1.我想知道是否可以在内部操作的回调中停止循环?
问题 2.我可以SomeMethod()
在回调中停止吗?
例如,我有如下代码:
foreach(...)
{
myObject.SomeMethod(s =>
{
// something break-like here to stop foreach/method?
});
}
[编辑]
这是我使用的代码示例 - 它不能按我的意愿工作。
bool test = false;
foreach (var drive in drives)
{
foundFolders.AddRange(
DirectoryWrapper.GetDirectories(drive, regex, true, s =>
{
Dispatcher.Invoke(new Action(() => SetWarningStatus(WarningTypes.Warning,
"Looking for backups: " + Environment.NewLine + s.Trim())), DispatcherPriority.Background);
test = true;
return;
}));
if (test)
break;
}
甚至Resharper
说return
这里是多余的......
解决方案
在@Tigran 的建议之后,我注意到我应该做的总是改变我的GetDirectories
定义。
从:
public static IEnumerable<string> GetDirectories(string root, string searchRegex, bool skipSystemDirs = false, Action<string> callback = null) {}
至:
public delegate bool MyCallback(string s);
public static IEnumerable<string> GetDirectories(string root, string searchRegex, bool skipSystemDirs = false, MyCallback callback = null)
然后我可以在回调函数中返回一个标志并在内部提供它GetDirectories()
。
顺便提一句。有趣的是,当我们将其"GetDirectories"
作为二进制文件时,我们可能无法在委托中停止它......我们必须等到它的执行完成。