前景提要:
    我要操作一个文件型数据库,开了50个线程。
    一边从internet获取数据一边insert
    但是运行的时候会报数据库被锁,我不知道怎么处理这个问题。
    所以想等数据全部取完了存在list里一起insert。
    但是又不知道怎么判断子线程已完成任务。

解决方案 »

  1.   

    可以设置标记
    或是自定义事件
    或是使用Thread的Join方法。
    每个线程结束后执行某个方法,方法中累计,如果和开始的线程数一样,就触发一个事件。
      

  2.   

    1 定义一AutoEventSet[]
    2 等候子线程结束的线程 WaitHandle.WaitAll(AutoEventSet[]),即INSERT线程
    3 每个子线程结束设置其对应的AutoResetEvent为终止状态。AutoResetEvent.Set()解释,当AutoEventSet数组全部为终止状态之前, WaitHandle.WaitAll()始终阻塞,直到全部信号量都为终止状态
      

  3.   


    哦。
    我开线程的主要目的是从internet获取数据。
    但是又处理不好,获取数据和insert to数据库的关系
    因为如果完全获取完了再insert的话
    又太占内存了。
      

  4.   


    由线程各自更新数据库会抛出异常
    提示 database is locked (sqlite)
    我不知道怎么等待解锁了再insert
      

  5.   


    谢谢你的回复。
    我想了一下,可以设置一个类变量。然后各个线程来++这个变量,然后触发事件。
    但这样的话,主线程岂不是要在一个while(true)里等待事件?