C#多线程处理多个队列数据的方法
程序员文章站
2023-12-05 22:34:40
本文实例讲述了c#多线程处理多个队列数据的方法。分享给大家供大家参考。具体实现方法如下:
using system;
using system.collecti...
本文实例讲述了c#多线程处理多个队列数据的方法。分享给大家供大家参考。具体实现方法如下:
using system; using system.collections.generic; using system.linq; using system.text; using system.threading; using system.collections; using system.windows.forms; namespace thredprocessqueue { //用于顯示狀態的代理方法類型定義 public delegate void delegateshowstateinfo(string state); /// <summary> /// 測試器 /// </summary> public class queuetester { private static bool _exit = false; //標記是否已中斷測試程序 private static form _ownerform; //測試的窗體 private static delegateshowstateinfo _statemethod; private static ilist _queue1 = new arraylist(); //queue1的數據 private static ilist _queue2 = new arraylist(); //queue2的數據 private static ilist _queue3 = new arraylist(); //queue3的數據 public static void stopthread() { _exit = true; _ownerform = null; } public static void testing(form sender, delegateshowstateinfo method) { _statemethod = method; _ownerform = sender; _exit = false; threadpool.queueuserworkitem(maintestthread); threadpool.queueuserworkitem(queue1thread); //啟動queue1線程 threadpool.queueuserworkitem(queue2thread); //啟動queue2線程 } //測試用的主線程,循環向隊列1中壓入數據。 public static void maintestthread(object state) { random r = new random(1); double v = 0; while (_exit == false) { //在while(true)里一直对数据进行读取,然后放到queue1中, //与此同时如果queue1中有数据,则线程1就开启 //臨時數據,隨機數 v = r.nextdouble(); _queue1.add(v); //把數據插入到隊列1 application.doevents(); showstate(); thread.sleep(100);//生成隨機數太快,為了看清效果,暫停n毫秒 } } //对queue1中的数据进行处理,处理后放到queue2中 public static void queue1thread(object state) { while (_exit == false) { while (_queue1.count > 0) { //对queue1中的数据进行处理,处理后放到queue2中 _queue2.add(_queue1[0]); _queue1.removeat(0); application.doevents(); showstate(); } } } //对queue2中的数据进行处理,处理后放到queue3中 public static void queue2thread(object state) { while (_exit == false) { while (_queue2.count > 0) { //对queue1中的数据进行处理,处理后放到queue2中 _queue3.add(_queue2[0]); _queue2.removeat(0); application.doevents(); showstate(); } } } //用于監視各隊列狀態的線程 public static void showstate() { string stateinfo = queuetester._queue1.count.tostring() " -> " queuetester._queue2.count.tostring() " -> " queuetester._queue3.count.tostring(); try { if (_ownerform != null) { _ownerform.invoke(_statemethod, stateinfo); application.doevents(); } } catch { } } } }
希望本文所述对大家的c#程序设计有所帮助。
推荐阅读
-
C#多线程处理多个队列数据的方法
-
C# 大数据导出word的假死报错的处理方法
-
C#实现ComboBox控件显示出多个数据源属性的方法
-
C#多线程处理多个队列数据的方法
-
多个interface有完全相同的签名方法得情况,C#比Java得处理似乎更合理一点
-
多个interface有完全相同的签名方法得情况,C#比Java得处理似乎更合理一点
-
C#实现ComboBox控件显示出多个数据源属性的方法
-
C#使用Linq to csv读取.csv文件数据2_处理含有非列名数据的方法(说明信息等)
-
orace数据库,多线程,表中新建了唯一约束(多个字段),插入操作时报唯一约束错误,问题处理方法
-
orace数据库,多线程,表中新建了唯一约束(多个字段),插入操作时报唯一约束错误,问题处理方法