请教一下,这个写的有问题吗,viewServer方法传递的参数是否会出现几条线程传递相同的参数
for (int rowIndex = 0; rowIndex < this.dataGridView1.SelectedRows.Count; rowIndex++)
{ bool isSuccesful=false;
threads[rowIndex] = new Thread(delegate()
{
isSuccesful = this.viewServer(this.dataGridView1.SelectedRows[rowIndex].Cells[1].Value.ToString(), dt_begin, dt_end);
}
);
threads[rowIndex].Start();}
private bool viewServer(string str_selectedIp, DateTime dt_begin, DateTime dt_end)
{
lock (lockReadWrite)
{
SysLogView co = new SysLogView();
string serverip = str_selectedIp;
bool isSuccesful = co.LoadEventLog(serverip, dt_begin, dt_end);
int value = progressBar.Value;
if(value < progressBar.Maximum)
{ value += 1;
//Thread.Sleep(2000);
SetProcessBarValue(value);
SetLabelValue(value+1);
}
return isSuccesful;
}
}多线程参数
for (int rowIndex = 0; rowIndex < this.dataGridView1.SelectedRows.Count; rowIndex++)
{ bool isSuccesful=false;
threads[rowIndex] = new Thread(delegate()
{
isSuccesful = this.viewServer(this.dataGridView1.SelectedRows[rowIndex].Cells[1].Value.ToString(), dt_begin, dt_end);
}
);
threads[rowIndex].Start();}
private bool viewServer(string str_selectedIp, DateTime dt_begin, DateTime dt_end)
{
lock (lockReadWrite)
{
SysLogView co = new SysLogView();
string serverip = str_selectedIp;
bool isSuccesful = co.LoadEventLog(serverip, dt_begin, dt_end);
int value = progressBar.Value;
if(value < progressBar.Maximum)
{ value += 1;
//Thread.Sleep(2000);
SetProcessBarValue(value);
SetLabelValue(value+1);
}
return isSuccesful;
}
}多线程参数
后面的 value你从progressBar里取,所以也不会对,会乱套
后加
Thread.Sleep(50);
解决问题