我用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

T[i].Join(5000);

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


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


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

参考技术A 你内存多少的,加到8G试试

以上是关于我用C# winform多线程,窗口就假死,等到线程全部完成了才可以点击。请问要怎么才可以让窗口不假死。的主要内容,如果未能解决你的问题,请参考以下文章

C#多线程实现循环。界面会假死怎么办?

C#程序窗口假死

Winform实现多线程异步更新UI(进度及状态信息)

winform 利用 多线程 处理窗体假死,利用 Invoke BeginInvoke 处理子线程调用 UI 控件报错的问题

C#程序窗口假死

WinForm 多线程+委托来防止界面假死