线程和委托
#region 线程 //线程一的方法 private void CrossThreadFlush() { while (true) { if (bFirstThread) { continue; } else { //将代理绑定到方法 FlushClient fc = new FlushClient(threadFunFirst); //this.BeginInvoke(fc);//调用代理 lvListView.Invoke(fc); bFirstThread = true; } } } //线程一的方法:开启ListView的虚拟模式 private void threadFunFirst() { //虚拟模式绑定 strList.Clear(); //imageList1.Images.Clear(); if(CurrentCacheItemSource != null) { CurrentCacheItemSource = null; } string[] astrPath = Directory.GetFileSystemEntries(tNode.Name); foreach (string strPath in astrPath) { if (clManageFile.IsHidden(strPath)) { continue; } strList.Add(strPath); } lvListView.VirtualListSize = strList.Count; lvListView.VirtualMode = true; } //线程二的方法:控制线程一 private void threadFunSecond() { while (true) { try { Monitor.Enter(list); iLoopx = list.Count; } finally { Monitor.Exit(list); } Thread.Sleep(100); try { Monitor.Enter(list); iLoopy = list.Count; } finally { Monitor.Exit(list); } if (iLoopx != iLoopy) { continue; } if (tNode != null) { if (tNode.Checked) { bFirstThread = false; list.Clear(); } else { continue; } } } }
ListBox listbox; StreamWriter sw; public Service(ListBox listbox, StreamWriter sw) { this.listbox = listbox; this.sw = sw; } public void SendToServer(string str) { try { sw.WriteLine(str); sw.Flush(); } catch { SetListBox("发送数据失败"); } } delegate void ListBoxCallback(string str); public void SetListBox(string str) { if (listbox.InvokeRequired == true) { ListBoxCallback d = new ListBoxCallback(SetListBox); listbox.Invoke(d, str); } else { listbox.Items.Add(str); listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); } }