有人知道为什么有时候在C#中使用
例如: 如果我在try块内使用
有趣的是,如果我在这10-15秒钟内在文件资源管理器中跳出该文件夹,那么应用程序实际上会完成
就好像:Windows会挂起10-15秒钟来看负责句柄(锁)的人是否自行关闭这些句柄,而不是立即抛出异常。
有没有办法使应用程序立即抛出异常?
Directory.Move()
操作会挂起/等待而不是立即抛出异常吗?例如: 如果我在try块内使用
Directory.Move()
方法,然后在文件资源管理器中导航到该文件夹,Windows会创建一些句柄来锁定它。
然后,我期望catch块立即执行,但实际上应用程序似乎会在抛出异常之前挂起10-15秒钟。有趣的是,如果我在这10-15秒钟内在文件资源管理器中跳出该文件夹,那么应用程序实际上会完成
Move()
操作。就好像:Windows会挂起10-15秒钟来看负责句柄(锁)的人是否自行关闭这些句柄,而不是立即抛出异常。
有没有办法使应用程序立即抛出异常?
try { Thread t = new Thread( new ThreadStart(delegate() { Directory.Move(source, dest); })); t.Start(); bool completed = t.Join(1000); if (!completed) { t.Abort(); } } catch { // Whatever }
- EqualskMoveFile
函数,这几乎肯定意味着不同操作系统版本之间会有差异。如果你想立即抛出异常,你可以在尝试移动之前检查目录是否被锁定,但这样做存在很大的竞态条件的潜在风险。(例如,在检查锁定和调用移动之间,目录变为锁定状态,你就会回到旧的/缓慢的行为方式。) - theB