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);
}
}
素胚勾勒不出你
TA贡献1827条经验 获得超9个赞
1. 锁的对象是 myLock,又不是 Datatable,当然其它线程能操作 Datatable。2. Datatable 是实例对象,每次操作都是不同的Datatable 对象,你也锁不定它,操作2中的Datatable和操作1中的 Datatable是不同的对象,不搭嘎。
杨魅力
TA贡献1811条经验 获得超6个赞
private static readonly object myLock = new object();
改成:
Public static readonly object myLock = new object();
- 5 回答
- 0 关注
- 482 浏览
添加回答
举报
0/150
提交
取消