我的问题是这样的,我写一个winform程序,日志模块是单独封装的dll,日志模块中定义了一个Log类,公开一个Write(LogTypes, Content)方法,Write方法主要实现将日志写如SQLite中,然后在winform主程序是直接引用这个Log.dll来记录日志的
如果winform是单线程运行,写日志是没问题的,但是,我的程序有一个页面是要做一个长时间的计算,实现计算过程我用了backgroundworker,没有自己去维护子线程,计算过程中我加了调试日志,
现在的问题是这样的,如果单纯运行那个页面执行计算,记录调试日志也没问题,但是,我允许用户在执行计算的过程时,还可以做其他操作(比如,查询报表等等,但是计算只能开一个,直到计算结束),对于其他操作,基本都是在主线程中做的,这些用户操作又会触发主线程去记录操作日志
现在运行起计算,再去做其他操作,有时候,程序就会报错,如下
“对象的当前状态使该操作无效。”
我分析原因应该是:2个线程异步运行,同时去调用了Write方法写同一个日志文件。
我在单独日志模块那个项目里,尝试用LOCK关键字去LOCK那个Wirte方法内部实现写SQLite的代码段,但是好像没作用,也尝试过使用Monitor,不过LOCK和monitor都不是很熟,所以不一定用对了,困惑啊
请教各位达人给小弟一些指点,谢谢!
sqlite支持并发的,你可以参考文章http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328753.html了解下
我用的SQLite版本比较低,好像是要到3才能实现并发吧,我的System.Data.SQLite.DLL是1.0.60.0版本的
所以谢谢,不过还是没有解决我的问题。