我想用更少的时间使用多线程来完成我的任务。但是当我运行我的线程时,它一个接一个地执行不能同时工作。如果我使用Thread.Sleep(),我的接口将被挂起,直到所有线程进程完成。这是我的代码。多线程不能同时在C#窗体中工作
private void Form2_Load(object sender, EventArgs e)
{
dataGridView.Columns.Add("Google", "Google"); //
dataGridView.Columns.Add("Google1", "Google1");
dataGridView.Rows.Add("google.com", "");
dataGridView.Rows.Add("amazon.com", "");
dataGridView.Rows.Add("flipkart.com", "");
dataGridView.Rows.Add("snapdeal.com", "");
dataGridView.Rows.Add("gmail.com", "");
dataGridView1.Columns.Add("Google", "Google");
dataGridView1.Columns.Add("Google1", "Google1");
dataGridView1.Rows.Add("google.com", "");
dataGridView1.Rows.Add("amazon.com", "");
dataGridView1.Rows.Add("flipkart.com", "");
dataGridView1.Rows.Add("snapdeal.com", "");
dataGridView1.Rows.Add("gmail.com", ""
}
private void button1_Click(object sender, EventArgs e)
{
Thread x = new Thread(new ThreadStart(thread1));
x.Start();
Thread x1 = new Thread(new ThreadStart(thread2));
x1.Start();
}
public void thread1()
{
Invoke(new Action(() =>
{
foreach (DataGridViewRow x in lstview.Rows)
{
if (x.Cells["Google"].Value == null)
{
return;
}
if (x.Cells["Google1"].Value == "")
{
webBrowser1.ScriptErrorsSuppressed = true;
x.Cells["Google1"].Value = "Thread1";
webBrowser1.Navigate(x.Cells["Google"].Value.ToString());
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
// Task.WaitAll();
}
}));
}
public void thread2()
{
Invoke(new Action(() =>
{
foreach (DataGridViewRow x in dataGridView1.Rows)
{
if (x.Cells["Google"].Value == null)
{
return;
}
if (x.Cells["Google1"].Value == "")
{
webBrowser2.ScriptErrorsSuppressed = true;
x.Cells["Google1"].Value = "thread2";
webBrowser2.Navigate(x.Cells["Google"].Value.ToString());
while (webBrowser2.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
}
}
}));
}