为了账号安全,请及时绑定邮箱和手机立即绑定

Lock怎么锁不住啊?

Lock怎么锁不住啊?

哈士奇WWW 2018-12-07 05:39:20
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里加数据呢?
查看完整描述

5 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

btn2也加上锁就是了 private void button2_Click(object sender, EventArgs e) { lock(myLock) { DataRow drow = dt.NewRow(); drow["aa"] = "66"; dt.Rows.Add(drow); } }  
查看完整回答
反对 回复 2018-12-09
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

你锁住了代码1,和个代码2有啥关系呢????
查看完整回答
反对 回复 2018-12-09
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

1. 锁的对象是 myLock,又不是 Datatable,当然其它线程能操作 Datatable。2. Datatable 是实例对象,每次操作都是不同的Datatable 对象,你也锁不定它,操作2中的Datatable和操作1中的 Datatable是不同的对象,不搭嘎。
查看完整回答
反对 回复 2018-12-09
?
杨魅力

TA贡献1811条经验 获得超6个赞

private static readonly object myLock = new object();         改成: Public static readonly object myLock = new object();        
查看完整回答
反对 回复 2018-12-09
  • 5 回答
  • 0 关注
  • 482 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信