在多线程操作界面会很卡,不知怎么解决
比如:
for(int i=0;i<listView1.Items.Count;i++)
{
listView1.Items[i].Text = "0";
}
创建一个Thread执行以上代码,会卡死在那里,直到循环执行完毕,这个问题如何解决呢?谢谢
(多线程已用委托调用)
比如:
for(int i=0;i<listView1.Items.Count;i++)
{
listView1.Items[i].Text = "0";
}
创建一个Thread执行以上代码,会卡死在那里,直到循环执行完毕,这个问题如何解决呢?谢谢
(多线程已用委托调用)
{
listView1.Items[i].Text = "0";
Application.DoEvents(); //加上这句试试.
}
BeginUpdate / EndUpdate 能否帮上你呢?
{
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
} private void Form1_Load(object sender, EventArgs e)
{
InitControl();
} private void btnReset_Click(object sender, EventArgs e)
{
InitControl();
} private void InitControl()
{
listView1.Items.Clear();
for (int i = 0; i < 100; i++)
{
listView1.Items.Add(new ListViewItem(i.ToString()));
}
} private void btnDo_Click(object sender, EventArgs e)
{
MyTestClass cls = new MyTestClass();
cls.MyDoEvent += new DoHandler(cls_MyDoEvent);
cls.Count = listView1.Items.Count;
ThreadStart start = new ThreadStart(cls.DoSome);
Thread th = new Thread(start);
th.Start();
} void cls_MyDoEvent(int i)
{
listView1.Items[i].Text = string.Format("{0}...",i);
} public delegate void DoHandler(int i); private class MyTestClass
{
public event DoHandler MyDoEvent; private int count = 0;
public int Count
{
set
{
count = value;
}
}
public void DoSome()
{
if(MyDoEvent!=null)
{
for (int i = 0; i <count; i++)
{
Thread.Sleep(100);
MyDoEvent.Invoke(i);
}
}
}
}
}