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) ?????????????????
?? { ???????????????????????
//一直循環(huán) ????????????????
??? } ???????????????
} ??????????? }); ??
???????
?? trd.Start();
??????? }
?
??????? private void button2_Click(object sender, EventArgs e) ???????
{ ???????????
DataRow drow = dt.NewRow(); ?????????
?? drow["aa"] = "66"; ??????????
? dt.Rows.Add(drow); ??????
? }
?
按鈕1 開了死循環(huán)線程 鎖住了啊
怎么按鈕2還可以 往 Datatable里加數(shù)據(jù)呢?
5 回答

繁花不似錦
TA貢獻1851條經(jīng)驗 獲得超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條經(jīng)驗 獲得超9個贊
1. 鎖的對象是 myLock,又不是 Datatable,當然其它線程能操作 Datatable。2. Datatable 是實例對象,每次操作都是不同的Datatable 對象,你也鎖不定它,操作2中的Datatable和操作1中的 Datatable是不同的對象,不搭嘎。

楊魅力
TA貢獻1811條經(jīng)驗 獲得超6個贊
private static readonly object myLock = new object(); ? ? ? ?
改成:
Public static readonly object myLock = new object(); ? ? ? ?
- 5 回答
- 0 關注
- 515 瀏覽