【问题标题】:Task.Run() in C# doesn't execute some partsC# 中的 Task.Run() 不执行某些部分
【发布时间】:2017-12-24 11:11:30
【问题描述】:

我想在不冻结主用户界面的情况下在后台执行任务。但是,我在 C# 中使用带有匿名函数的 Task.Run() 时遇到了一些问题,因为它似乎不执行代码。我认为我的实现可能不正确。

private  List<string> GetPdfList
{
    get
    {
        return File.Directory.GetFiles(PDF_FILE_DIRECTORY);
    }
}

private  void InitializePdf()
{
    if (GetPdfList.Count > 0)
    {
        foreach (var pdf in GetPdfList)
        {
            var converter = new PdfConvertor();
            var format = ImageFormat.Png;
            converter.Convert(pdf, TempFolder, format);
        }

    }
}


public  MainForm()
{
    InitializeComponent();
    Task.Run(() =>
    {
        InitializePdf();
    });
}

我认为问题出在 foreach 范围

【问题讨论】:

  • 设置断点并使用调试器检查 a) 执行是否完全到达循环和 b) 列表是否有元素。此外,构造函数可能不是创建线程的最佳位置。使用 Load 事件或(第一个)Activate 事件。
  • '可能'是权限问题,尝试在主线程上运行InitializePdf();,以确保它被Task.Run(...)探测到
  • 在主线程运行时完美运行

标签: c# multithreading asynchronous multitasking


【解决方案1】:

Task.Run() 创建任务,但不执行它。 为了做你想做的事,你应该等待异步事件中的任务结果。 见Async loading for winforms

【讨论】:

  • 这不是真的。 Task.Run() 确实 启动任务运行,因此得名。注意这里没有结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 2023-03-24
  • 2021-07-18
相关资源
最近更新 更多