多线程 LISTBOX
--------------------编程问答-------------------- LISTBOX 数据太多,用户选择体验效果也不好可通过datagridview等分页选择数据
--------------------编程问答-------------------- for (int i = 0; i < listView1.Items.Count)
{
ProcessItem(ListView1.Items[i]);
System.Threading.DoEvents();
}
void ProcessItem(ListViewItem li)
{
string s = li.Text;
Do(s);
li.Text = new value;
} --------------------编程问答--------------------
多谢,我用的是VB.NET,你这是C#的吧?看不太懂
能否解释一下?
--------------------编程问答-------------------- 学习。对于多线程的相关知识知道的很少。等待高手解答 --------------------编程问答--------------------
Dim i As Integer
For i = 0 To listView1.Items.Count
ProcessItem(ListView1.Items(i))
System.Threading.DoEvents
Next
假设你在 ProcessItem 处理你的数据。 --------------------编程问答-------------------- ivate Delegate Sub CopyListItemCallBaCk()
Private Sub button1_Click(sender As Object, e As EventArgs)
Dim t As New Thread(New ThreadStart(AddressOf CopyListItem))
t.Start()
End Sub
Private Sub CopyListItem()
If Me.listBox1.InvokeRequired OrElse Me.listBox2.InvokeRequired Then
Dim cb As New CopyListItemCallBaCk(AddressOf CopyListItem)
Me.Invoke(cb)
Else
listBox2.Items.Clear()
For Each o As Object In listBox1.Items
listBox2.Items.Add(o)
Next
End If
End Sub
--------------------编程问答-------------------- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs)
Dim td As New System.Threading.Thread(AddressOf additem)
td.Start()
End Sub
Public Delegate Sub addInvo()
Public Sub additem()
If ListView1.InvokeRequired = False Then
ListView1.Columns.Add("ID")
ListView1.Columns.Add("Data")
ListView1.Items.Add("0")
ListView1.Items(0).SubItems.Add("a")
ListView1.BackColor = Color.Yellow
ListView1.View = View.Details
Else
Dim del As New addInvo(AddressOf additem)
ListView1.Invoke(del)
End If
End Sub
--------------------编程问答-------------------- --------------------编程问答--------------------
ProcessItem(ListView1.Items[i])这个值如何传给多个线程的?要用带参数的线程吗?
求示例代码,谢谢
--------------------编程问答-------------------- 楼主的思路有问题,多线程和listbox没什么关系。listbox 是UI上的东西,你的数据,应该保存在一个 List<T> 里,可以试试线程池来处理这些 item,代码类似于这个:
foreach item
{
ThreadPool.QueueUserWorkItem(x => process(x));
}
--------------------编程问答--------------------
多谢提醒,将数据放在LISTBOX 再由线程来提取不行吗?
能否给我个较完整的示例?
--------------------编程问答-------------------- 放在LISTBOX 再由线程来提取是可以的,看个人爱好:
private void process(object o)
{
...
}
foreach(var item in listbox1.items)
{
ThreadPool.QueueUserWorkItem(x => process(item));
}
--------------------编程问答--------------------
恳请这段较完整代码,
本人对多线程实在一时半会掌握不了。万后感谢,给分! --------------------编程问答-------------------- phil999
帮我写这个多线程的代码,付费也可以,加我Q:89281060 --------------------编程问答--------------------
比较急
补充:.NET技术 , VB.NET