【发布时间】: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