应该是了吧,Lock的代码区是临界区>>Application.Lock()对tblOnline是否是锁住的?在此,tblOnline指向的应该是一个引用,你的代码不能保证tblOnline不被其它代码修改

解决方案 »

  1.   

    Application.Lock是为了和原Asp兼容才保留的。
    但其实性能非常差。
    既然你的DataTable有个名字,
    你可以这样:lock("km_OnlineList")
    {
    ...
    }
      

  2.   

    个人认为没有问题_context.Application.UnLock();
    前面加上
    _context.Application["km_OnlineList"]=tblOnline;
    见得更多点
      

  3.   

    晕啊~~~~
    DataTable是class,不是struct也
      

  4.   

    不要晕,我知道他是引用,
    但我看了 <profession C# >的处理,最后也是加上了
    赋值部分,我不清楚原因。
    但我想, 可能是增加可读性吧?
      

  5.   

    To Lostinet(迷失网络)lock ( 表达式 ) 嵌入语句 
    我不太明白:表达式必须表示引用类型的值.
    请问在这里我应该怎么写?例如你说的lock("km_OnlineList"){...}这个km_OnlineList是指的什么?我的DataTable有个名字,但是这里名字是tblOnline 阿,是不是应该是lock(tblOnline ){...}
      

  6.   

    lock是不能使用int,double,DateTime等ValueType类型的。。~~~
    例如
    lock(DateTime.Parse("2002/1/1"))是错的。。

    int CustomerID=3;
    lock((object)CustomerID)却是对的。tblOnline是变量名,而不是你的DataTable的名字。
    难道你说:
    DataTable tblOnline=(DataTable)_context.Application["km_OnlineList"];
    DataTable tblOnline2=tblOnline;
    这个DataTable有两个名字不?
    当然,km_OnlineList也不一定是你的DataTable的名字,但它也代表了你的DataTable
      

  7.   

    楼上的,谢谢
    但是我不知道怎么样把引用类型的值放到lock(express)中,你能举个例子给我吗?
    若这里:DataTable tblOnline=(DataTable)_context.Application["km_OnlineList"];
    tblOnline是引用类型的,其实就是一个句柄,但是我怎么把它的值放到lock()中去?
      

  8.   

    lock()
    是锁定对象
    lock(tblOnline)就可以了