gpt4 book ai didi

C# 检查文件夹避免阻塞 UI

转载 作者:行者123 更新时间:2023-11-30 22:57:48 25 4
gpt4 key购买 nike

这是我的代码,用于检查目录是否存在。由于该目录也可能是网络文件夹,因此我设置了超时。该代码有效,但它阻止了我的 UI:

    private delegate bool DirectoryExistsDelegate(string folder);
public static bool DirectoryExists(string path, int timeout = 2000)
{
bool retValue = false;
try
{
DirectoryExistsDelegate callback = new DirectoryExistsDelegate(Directory.Exists);
IAsyncResult result = callback.BeginInvoke(path, null, null);
if (result.AsyncWaitHandle.WaitOne(timeout, false))
return callback.EndInvoke(result);
return false;
}
catch
{
return false;
}
}

如何解决?

最佳答案

您的方法在 Exists 调用完全完成之前不会返回,因此它将始终阻塞 UI。您实际上已经启动了一个异步操作,但随后坐在那里摆弄拇指等待它完成。

正如 Dmitry Bychenko 指出的那样,您可以在另一个线程中执行此操作,并使用 asyncawaitTask.Run 非常干净地处理它.为此,您还应该使调用此方法的事件处理程序 async,例如:

// An async event handler
public async void Button_Click(...)
{
...
var exists = await DirectoryExists(myPath);
...
}

public async Task<bool> DirectoryExists(string path)
{
return await Task.Run<bool>(() => Directory.Exists(path));
}

关于C# 检查文件夹避免阻塞 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com