use*_*813 12 c# connection networking
我公司的代码库包含以下C#行:
bool pathExists = Directory.Exists(path);
Run Code Online (Sandbox Code Playgroud)
在运行时,字符串path
恰好是公司内部网上文件夹的地址 - 类似于\\company\companyFolder
.当从我的Windows机器到内联网的连接启动时,这可以正常工作.但是,当连接断开时(就像今天一样),执行上面的行会导致应用程序完全冻结.我只能通过使用任务管理器将其删除来关闭应用程序.
当然,我宁愿在这种情况下Directory.Exists(path)
回归false
.有没有办法做到这一点?
Jar*_*Par 12
无法更改Directory.Exists
此方案的行为.在引擎盖下,它在UI线程上通过网络发出同步请求.如果网络连接由于中断,流量太大等原因而挂起......它将导致UI线程也挂起.
您可以做的最好的事情是从后台线程发出此请求,并在经过一定时间后明确放弃.例如
Func<bool> func = () => Directory.Exists(path);
Task<bool> task = new Task<bool>(func);
task.Start();
if (task.Wait(100)) {
return task.Value;
} else {
// Didn't get an answer back in time be pessimistic and assume it didn't exist
return false;
}
Run Code Online (Sandbox Code Playgroud)