你好
我有一个使用专有数据集访问数据库的控件。该数据库是一个旧的 ISAM 基础数据库。
该控件使用后台线程来使用专有数据集查询数据库。
一个表单上会有几个这样的控件,每个都使用自己的线程来访问数据,因为它们都需要同时加载。
专有数据集通过显示一个 VCL TForm 通知用户正在打开的表被另一个用户锁定并且数据集正在等待释放锁来处理并发。
表单上有一个取消按钮,可以让用户取消锁定等待。
问题:
从线程中使用专有数据集时,如果显示锁定等待形式,应用程序将崩溃、挂起或给出一些错误。我怀疑这与 VCL 不是线程安全的有关。
我已经通过同步 Dataset.Open 解决了这个问题,但是这会阻止主线程直到 dataset.open 返回,这可能需要相当长的时间,具体取决于查询的复杂性。
我已经显示了一个模态进度条,让用户知道它正在发生的事情,但我不喜欢这个想法,因为用户将等待进度条完成。
专有数据集代码被编译到主应用程序中,即它不存储在单独的 DLL 中。在开发过程的这个阶段,我们不允许更改锁定的工作方式或是否显示表单,因为我们离发布太近了。
理想情况下,我希望 Dataset.open 在控制线程中运行,而不是使用主线程,但这似乎不太可能工作。
其他人可以建议解决方法吗?请。