C#多线程处理多个队列的数据(交叉线程访问及Invoke方法使用)
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線程
}
// 来源:www.CSFramework.com, C/S结构框架学习网
{
_StateMethod = method;
_OwnerForm = sender;
_Exit = false;
ThreadPool.QueueUserWorkItem(MainTestThread);
ThreadPool.QueueUserWorkItem(Queue1Thread); //啟動Queue1線程
ThreadPool.QueueUserWorkItem(Queue2Thread); //啟動Queue2線程
}
// 来源:www.CSFramework.com, C/S结构框架学习网

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Collections;
using System.Windows.Forms;
// C/S框架网 www.csframework.com
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
{
}
}
}
}
// 来源:www.CSFramework.com, C/S结构框架学习网
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Collections;
using System.Windows.Forms;
// C/S框架网 www.csframework.com
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
{
}
}
}
}
// 来源:www.CSFramework.com, C/S结构框架学习网
参考文档:
CSFrameworkV6试用版开发指南 | GetDataByKey 方法使用与扩展应用|C/S开发框架
CSFrameworkV6 - Winform开发框架 - Delete方法使用
CSFrameworkV6 - Winform开发框架 - GetLookupData方法使用
CSFrameworkV6 - 基础资料窗体 - ValidatingData / CheckNoExists方法使用
CSFrameworkV6 - 基础资料窗体 - ShowSummary方法使用
C#使用PInvoke.Kernel32加载非托管DLL嵌入资源-C/S开发框架
.NETCore WebApi后端开发框架+达梦数据库测试报告|C/S开发框架
C#.NET反射获取Form窗体中所有的方法Method|C/S开发框架
软件自动升级程序AutoUpgrader优化:获取最新升级包|C/S开发框架
Windows桌面系统软件开发框架 | 基于.NET Framework开发平台|C/S开发框架
软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲
C#.NET 6 实现全局异常处理-C/S开发框架
C#异步编程(多线程)-C/S开发框架
C#的Expression表达式使用方法-C/S开发框架
IOC实践(IOC控制反转)-C/S开发框架
C# 多线程入门
CSFrameworkV6试用版开发指南 | GetDataByKey 方法使用与扩展应用|C/S开发框架
CSFrameworkV6 - Winform开发框架 - Delete方法使用
CSFrameworkV6 - Winform开发框架 - GetLookupData方法使用
CSFrameworkV6 - 基础资料窗体 - ValidatingData / CheckNoExists方法使用
CSFrameworkV6 - 基础资料窗体 - ShowSummary方法使用
C#使用PInvoke.Kernel32加载非托管DLL嵌入资源-C/S开发框架
.NETCore WebApi后端开发框架+达梦数据库测试报告|C/S开发框架
C#.NET反射获取Form窗体中所有的方法Method|C/S开发框架
软件自动升级程序AutoUpgrader优化:获取最新升级包|C/S开发框架
Windows桌面系统软件开发框架 | 基于.NET Framework开发平台|C/S开发框架
软件开发框架培训内容大全 | CSFrameworkV5.1旗舰版|培训大纲
C#.NET 6 实现全局异常处理-C/S开发框架
C#异步编程(多线程)-C/S开发框架
C#的Expression表达式使用方法-C/S开发框架
IOC实践(IOC控制反转)-C/S开发框架
C# 多线程入门
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
