C#多线程操作
我有一个多线程操作的程序,主要实现功能是:点ScanButton这个按钮后,启用一个Timer,这个Timer执行UDP报文的监听,如果有机器回应,则将该机器的IP信息,加到listview的列表中,这个Timer执行10秒后,自动停止,并且有相应的进度条progressBar显示Timer的执行进度。
现在出现的问题是:点击按钮后,每次进度条都没有走完,进度条没有走完,是不是说明Timer没有执行规定的次数就结束了?不知道是什么问题,请高手看一下。
ScanButton点击响应代码如下:
private void ScanButton_Click(object sender, EventArgs e) { byte[] buffer = new byte[] { 0x55, 0x01, 0xAA }; var tes = new TimerState(); var listenDelegate = new TimerCallback(BeginListen); var timer = new System.Threading.Timer(listenDelegate, tes, 10, 1000); tes.Tmr = timer;}
private void BeginListen(object o) { var ts = (TimerState)o; ts.Counter++; if (ts.Counter == 101) { ts.Tmr.Dispose(); ts.Tmr = null; } byte[] data ; data = udpRec.Receive(ref iep); if (data.Length == 11 && data[0] == 0x55 && data[1] == 0x01 && data[10] == 0xaa) { string ip = data[2].ToString() + "." + data[3].ToString() + "." + data[4].ToString() + "." + data[5].ToString(); string netmask = data[6].ToString() + "." + data[7].ToString() + "." + data[8].ToString() + "." + data[9].ToString(); ListViewItem _item = new ListViewItem(); _item.SubItems[0].Text = ip; _item.SubItems.Add(netmask); UpdateListviewDelegate d_listview = new UpdateListviewDelegate(UpdateListview); listView1.Invoke(d_listview, _item); } UpdateProgressBarDelegate d_progressbar = new UpdateProgressBarDelegate(UpdateProgressBar); progressBar.Invoke(d_progressbar, ts.Counter); }
delegate void UpdateProgressBarDelegate(int value); private void UpdateProgressBar(int value) { progressBar.Value = value; } delegate void UpdateListviewDelegate(ListViewItem item); private void UpdateListview(ListViewItem item) { if (!isExist(item)) listView1.Items.Add(item); }