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

下面是代码:privatevoidbutton1_Click(objectsender,EventArgse){Thread[]T=newThread[int.Parse... 下面是代码:

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
{ }
}
展开
 我来答
然后去远足
2017-03-10 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2368万
展开全部
T[i].Join(5000);

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


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


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

luciferi_chen
2017-03-10 · TA获得超过136个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:72.5万
展开全部
你内存多少的,加到8G试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式