我用C# winform多线程,窗口就假死,等到线程全部完成了才可以点击。请问要怎么才可以让窗口不假死。

下面是代码:

private void button1_Click(object sender, EventArgs e)
{
Thread[] T = new Thread[int.Parse(tb_xc.Text)];
for (int i = 0; i < int.Parse(tb_xc.Text); i++)
{
T[i] = new Thread(new ThreadStart(zxmysql));
T[i].Name = "xianc" + i.ToString();
T[i].Start();
T[i].Join(5000);
}
}
public int ss = 0;
public void zxmysql()
{
int shu = dataGridView1.RowCount;
try
{
lock (new object())
{
while (ss < shu)
{
string ip = dataGridView1.Rows[ss].Cells["ip"].Value.ToString();
string yh = dataGridView1.Rows[ss].Cells["zh"].Value.ToString();
string ma = dataGridView1.Rows[ss].Cells["mm"].Value.ToString();
bool pd = mysql(ip, yh, ma);
if (pd)
{
dataGridView1.Rows[ss].Cells["zt"].Value = "成功";
}
else
{
dataGridView1.Rows[ss].Cells["zt"].Value = "失败";
}
ss++;
zhixin.Text = ss.ToString();
}
}
}
catch
{ }
}

T[i].Join(5000);

这难道不是题主自己阻塞的主线程???


题主写的每一个子线程都告诉主线程:“你给我停五秒”,然后现在问主线程为啥假死了???


而且,lock (new object()) 这句除了增加 CPU 负担以外没有任何用途,感觉上题主是想加锁,实际上每个线程都锁的是不同的对象,完全没体现出锁的意义。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-10
你内存多少的,加到8G试试
相似回答