继续调度程序的foreach循环

时间:2019-02-11 07:40:03

标签: c# wpf loops foreach dispatcher

我有一个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);

但是continue不可用,我该怎么做?

1 个答案:

答案 0 :(得分:1)

如我的评论中所述,您的Dispatcher.InvokeAsync的lambda不知道它在循环中被调用,因此没有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);