Продолжить цикл foreach от диспетчера
У меня есть цикл foreach, и я использовал диспетчер внутри него, и у меня есть другой foreach внутри. Я хочу продолжить первый foreach после проверки результатов.
bool isNude = false;
var SearchTask = Task.Run(async () =>
{
foreach (var file in await GetFileListAsync(GlobalData.Config.DataPath))
{
isNude = false;
if (!ct.IsCancellationRequested)
{
await Dispatcher.InvokeAsync(() =>
{
if (ButtonNude.IsChecked == true)
{
foreach (var itemx in nudeData)
{
if (itemx.Equals(Path.GetFileNameWithoutExtension(file.FullName)))
{
isNude = true;
break;
}
}
}
if (isNude)
continue;
}, DispatcherPriority.Background);
}
}
}, ct);
Но продолжение не доступно, как я могу это сделать?
1 ответ
Решение
Как уже упоминалось в моем комментарии, ваша лямбда для Dispatcher.InvokeAsync
не знает, что он вызывается в цикле, поэтому нет continue
имеется в наличии. Вам нужно использовать return
чтобы выйти из ожидаемой задачи, чтобы ваш код мог продолжить работу после ожидаемой задачи.
bool isNude = false;
var SearchTask = Task.Run(async () =>
{
foreach (var file in await GetFileListAsync(GlobalData.Config.DataPath))
{
isNude = false;
if (!ct.IsCancellationRequested)
{
await Dispatcher.InvokeAsync(() =>
{
if (ButtonNude.IsChecked == true)
{
foreach (var itemx in nudeData)
{
if (itemx.Equals(Path.GetFileNameWithoutExtension(file.FullName)))
{
isNude = true;
break;
}
}
}
if (isNude)
return; // continue -> return
// other code
}, DispatcherPriority.Background);
// <--- code continues here after return
}
}
}, ct);