我用C# winform多线程,窗口就假死,等到线程全部完成了才可以点击。请问要怎么才可以让窗口不假死。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用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
这难道不是题主自己阻塞的主线程???
题主写的每一个子线程都告诉主线程:“你给我停五秒”,然后现在问主线程为啥假死了???
而且,lock (new object()) 这句除了增加 CPU 负担以外没有任何用途,感觉上题主是想加锁,实际上每个线程都锁的是不同的对象,完全没体现出锁的意义。
参考技术A 你内存多少的,加到8G试试以上是关于我用C# winform多线程,窗口就假死,等到线程全部完成了才可以点击。请问要怎么才可以让窗口不假死。的主要内容,如果未能解决你的问题,请参考以下文章
winform 利用 多线程 处理窗体假死,利用 Invoke BeginInvoke 处理子线程调用 UI 控件报错的问题