продолжить цикл foreach от диспетчера - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть цикл 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 Ответ

0 голосов
/ 11 февраля 2019

Как уже упоминалось в моем комментарии, ваша лямбда для 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);
...