我在TIMER里面放了线程这样子循环,运行时候删除listView1.Items里的项时候会报错。怎么样才可以让其他线程不运行只运行主线程呢?
private void timer1_Tick(object sender, EventArgs e)
{ _n = 0;
timer1.Enabled = false;
Thread[] thrs = new Thread[listView1.Items.Count];
for (int i = 0; i < listView1.Items.Count; i++)
{ thrs[i] = new Thread(new ThreadStart(ThreadProc));
Control.CheckForIllegalCrossThreadCalls = false;
thrs[i].Start();
}
//thrs[i].Abort();
Application.DoEvents();
timer1.Enabled = true;
}
public void ThreadProc()
{
for (int i = 0; i < listView1.Items.Count; i++)
{
if (i == _n)
{
string err = "";
string url = listView1.Items[i].SubItems["Url"].Text;
string page = fafa(url, out err);
gete(i, err, page, url); //break;
}
}
_n++; }
private void timer1_Tick(object sender, EventArgs e)
{ _n = 0;
timer1.Enabled = false;
Thread[] thrs = new Thread[listView1.Items.Count];
for (int i = 0; i < listView1.Items.Count; i++)
{ thrs[i] = new Thread(new ThreadStart(ThreadProc));
Control.CheckForIllegalCrossThreadCalls = false;
thrs[i].Start();
}
//thrs[i].Abort();
Application.DoEvents();
timer1.Enabled = true;
}
public void ThreadProc()
{
for (int i = 0; i < listView1.Items.Count; i++)
{
if (i == _n)
{
string err = "";
string url = listView1.Items[i].SubItems["Url"].Text;
string page = fafa(url, out err);
gete(i, err, page, url); //break;
}
}
_n++; }
非UI线程不能直接访问UI线程中的对象。
你需要使用控件的invoke来调用方法