-2
メインのユーザーインターフェイスをフリーズせずにバックグラウンドでタスクを実行したい。しかし、C#でTask.Run()を使用すると、コードを実行しないように見えるので、問題があります。私の実装は間違っているかもしれないと思う。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イベントを使用します。 – dlatikay
'特権が問題になる可能性がありますので、 'Task.Run(...)'でprobemであることを確認するために' InitializePdf(); 'を実行してみてください – YukiNyaa
メインスレッド上で実行すると完全に動作します –