首页 新闻 会员 周边 捐助

Lock怎么锁不住啊?

0
悬赏园豆:10 [已解决问题] 解决于 2013-04-16 09:46

 public partial class Form1 :

    {        

private static readonly object myLock = new object();        

Thread trd;        

DataTable dt;

        public Form1()        

{             InitializeComponent();

            dt = new System.Data.DataTable();            

DataColumn col = new System.Data.DataColumn();           

  col.ColumnName = "aa";           

  dt.Columns.Add(col);        

}

        private void button1_Click(object sender, EventArgs e)        

{           

  trd = new Thread(delegate()            

{                

lock (myLock)              

   {                    

DataRow drow = dt.NewRow();                  

   drow["aa"] = "55";                  

   dt.Rows.Add(drow);                    

while (true)                  

   {                        

//一直循环                 

    }                

}             });   

       

   trd.Start();

        }

 

        private void button2_Click(object sender, EventArgs e)        

{            

DataRow drow = dt.NewRow();          

   drow["aa"] = "66";           

  dt.Rows.Add(drow);       

  }

 

按钮1 开了死循环线程 锁住了啊

怎么按钮2还可以 往 Datatable里加数据呢?

吴顶天的主页 吴顶天 | 初学一级 | 园豆:39
提问于:2013-04-10 22:49
< >
分享
最佳答案
1

btn2也加上锁就是了

private void button2_Click(object sender, EventArgs e)        
{        
        lock(myLock)
        {    
                DataRow drow = dt.NewRow();          
                drow["aa"] = "66";           
                dt.Rows.Add(drow);      
        } 
 }

 

收获园豆:10
滴答的雨 | 老鸟四级 |园豆:3660 | 2013-04-11 09:15
其他回答(4)
0

你锁住了代码1,和个代码2有啥关系呢????

路过秋天 | 园豆:4787 (老鸟四级) | 2013-04-11 02:30
1

1. 锁的对象是 myLock,又不是 Datatable,当然其它线程能操作 Datatable。
2. Datatable 是实例对象,每次操作都是不同的Datatable 对象,你也锁不定它,操作2中的Datatable和操作1中的 Datatable是不同的对象,不搭嘎。

Qlin | 园豆:2403 (老鸟四级) | 2013-04-11 08:51
0

在java里面,如果锁加了static,那么就是类锁,不会锁实例方法的,你可以参考下

benx621 | 园豆:206 (菜鸟二级) | 2013-04-12 11:29
0

private static readonly object myLock = new object();        

改成:

Public static readonly object myLock = new object();        

luofer | 园豆:468 (菜鸟二级) | 2013-04-15 17:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册