我想用更少的時間使用多線程來完成我的任務。但是當我運行我的線程時,它一個接一個地執行不能同時工作。如果我使用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();
}
}
}
}));
}