首页 新闻 会员 周边

C# 多线程 同调用一个静态方法的问题

0
悬赏园豆:15 [已关闭问题] 关闭于 2012-08-13 22:47

我的问题是这样的,我写一个winform程序,日志模块是单独封装的dll,日志模块中定义了一个Log类,公开一个Write(LogTypes, Content)方法,Write方法主要实现将日志写如SQLite中,然后在winform主程序是直接引用这个Log.dll来记录日志的

如果winform是单线程运行,写日志是没问题的,但是,我的程序有一个页面是要做一个长时间的计算,实现计算过程我用了backgroundworker,没有自己去维护子线程,计算过程中我加了调试日志,

现在的问题是这样的,如果单纯运行那个页面执行计算,记录调试日志也没问题,但是,我允许用户在执行计算的过程时,还可以做其他操作(比如,查询报表等等,但是计算只能开一个,直到计算结束),对于其他操作,基本都是在主线程中做的,这些用户操作又会触发主线程去记录操作日志

现在运行起计算,再去做其他操作,有时候,程序就会报错,如下

“对象的当前状态使该操作无效。”

我分析原因应该是:2个线程异步运行,同时去调用了Write方法写同一个日志文件。

 

 

我在单独日志模块那个项目里,尝试用LOCK关键字去LOCK那个Wirte方法内部实现写SQLite的代码段,但是好像没作用,也尝试过使用Monitor,不过LOCK和monitor都不是很熟,所以不一定用对了,困惑啊

请教各位达人给小弟一些指点,谢谢!

David丶Beckham的主页 David丶Beckham | 初学一级 | 园豆:193
提问于:2012-08-02 10:22
< >
分享
所有回答(1)
0

sqlite支持并发的,你可以参考文章http://www.cnblogs.com/stephen-liu74/archive/2012/01/22/2328753.html了解下

today4king | 园豆:3499 (老鸟四级) | 2012-08-02 10:49

我用的SQLite版本比较低,好像是要到3才能实现并发吧,我的System.Data.SQLite.DLL是1.0.60.0版本的

所以谢谢,不过还是没有解决我的问题。

支持(0) 反对(0) David丶Beckham | 园豆:193 (初学一级) | 2012-08-02 14:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册