【发布时间】:2021-09-19 00:05:53
【问题描述】:
我在 C# .Net WPF 中创建了一个应用程序。此应用使用 sqlite 数据库,但此数据库与其他程序共享。
很少有我的应用程序和其他应用程序同时运行,而且他们尝试同时在数据库中写入的情况更少。而且此时所有应用程序都崩溃了...
所以,我想修补我的应用程序以等待数据库不再被锁定,然后再对其进行操作。 我一直在考虑通过多次尝试来制作一个肮脏的 try/catch 循环,但在我看来这是一种太肮脏的方式(并且浪费资源)
另一个程序在使用 db 时有一个视觉指示器,所以我认为解决方案可能涉及用户操作。当数据库被锁定时,会打开一个 MessageBox 通知用户等待其他程序完成后再单击确定并继续。
是不是不用try/catch就可以测试数据库是否被锁定?
【问题讨论】:
-
我认为“唠叨”用户不需要做任何事情,只需按下按钮重试。我宁愿选择具有最大 reties 的“脏”try/catch 循环。
-
是的,我没说清楚:用户可以关闭其他主要是故障的程序,它会进行数据库验证,因此它们可以快速或长时间取决于情况;如果稍后重新启动验证,则没有任何区别。
-
我不知道。你只需要尝试看看会发生什么。但是,如果您正确地与数据库交互,那么等待时间应该不会很长,因此简单的重试模式应该可以有效地向用户隐藏问题。如果由于某种原因确实需要很长时间,请退出并提供消息。
-
感谢您的观点;但我仍然坚持认为我无法访问使用 db 的错误程序。而且他的使用时间非常混乱。是的,另一种方法是在我使用数据库之前强制杀死我的这个应用程序。然而,我们仍然处于肮脏的道路上。我的观点是,try/catch 方法不是一个好习惯,我试图避免它,在这种特殊情况下,用户操作似乎更可取,但我不知道在没有 try/catch 的情况下测试是否锁定的方法.
-
尝试打开文件流并捕获任何
IOException是解决您问题的完美解决方案。处理预期的异常不是“资源浪费”。