解决VS2005中,线程间不可互操作问题的一揽子解决方案

VS2005环境下的多线程编程实践 在Windows操作系统中,线程是执行任务的最小单位。Windows使用称为“抢占式多任务处理”的方法来在多个线程间分配处理器时间,这允许操作系统决定哪个线程获得执行的机会。Windows线程模型遵循内核对象模型,每个线程都被表示为一个内核对象。线程可以分为用户模式线程和内核模式线程。用户模式线程由用户模式下的线程库管理,而内核模式线程则由操作系统核心管理。在Windows中,每个进程默认至少有一个线程,称为主线程。开发者可以通过调用Windows API函数来创建和管理额外的线程。 阅读详情

解决VS2005中,线程间不可互操作的问题,一揽子解决方案:

一、首先,定义一个类:SetControlProperty

using System.Reflection;
using System;
using System.Windows.Forms;

namespace Ways.Utils
{
    class SetControlProperty
    {
        delegate void SetValueDelegate(Object obj, Object val, Object[] index);

        public SetControlProperty(Control ctrl, String propName, Object val)
        {
            PropertyInfo propInfo = ctrl.GetType().GetProperty(propName);
            Delegate dgtSetValue = new SetValueDelegate(propInfo.SetValue);
            ctrl.Invoke(dgtSetValue, new Object[3] { ctrl, val, null });
        }
    }
}

 

二、在要操作Form中调用

本例中,此调用是由一通讯事件引发的:

        void testcommand_EndStatusEvent(object sender, EventArgs e)
        {
            new SetControlProperty(label4, "Text", "END");
            new SetControlProperty(button1, "Enabled", true);
            myComm.EndProtocol();
        }

 

三、 最简化,但却不安全的方案

Control.CheckForIllegalCrossThreadCalls = false;

试过了,在.net compact framework中,不可用!

多线程示例程序(vs2005) 售票系统演示,网上搜的,在vs2005里实现,非原创 立即下载

相关推荐

Q学习(Q-learning)入门小例子及python实现

一、从马尔科夫过程到Q学习 # 有一定基础的读者可以直接看第二部分 Q学习(Q-learning)算法是一种与模型无关的强化学习算法,以马尔科夫决策过程(Markov Decision Processes, MDPs)为理论基础。 标准的马尔科夫决策过程可以用一个五元组<S,A,P,R,γ>表示,其中: S是一个离散有界的状态空间; A是一个离散的动作空间; P为状态转...

wlm_py的博客 4万+

java线程通信,解决线程之间的交互问题

线程通信: 注意三个都是Object的方法 并且都必须在synchronzied代码块和安全方法下使用否则会报异常 wiat:使当前线程挂起,释放锁,其他线程可以参与进来共享其数据。 notify:唤醒当前线程,让线程握住锁,其他线程无法参与进来。 notifyall:唤醒所有的线程。 下面为活生生列子一枚: public class ThreadTest { public stat

biubiubiubiubiu 2221

Windows批处理脚本实战:用Ping命令打造简易网络监控工具(附完整代码)

本文介绍如何利用Windows批处理脚本和Ping命令,快速构建一个轻量级、自动化的网络监控工具。该方案无需额外安装软件,通过周期性探测目标IP连通性,并将结果(成功、失败及延迟)自动记录到带时间戳的日志文件中,适合中小团队或临时监控需求,实现低成本、高效率的网络状态监控。

5f4d3s2a1q的博客 494

[vs 2005]_Lockit类

一、_Lockit类的定义: vs 2005中有一个_Lockit类,它是为了线程同步而设置的。_Lockit定义如下(代码有删减):class _Lockit { // lock while object in existence -- MUST NEST public:

huyinhou 2079

幸狐RV1106开发板实战:5分钟搞定Yolo8模型部署(附避坑指南)

本文详细介绍了在幸狐RV1106开发板上快速部署YOLOv8模型的实战流程。通过RKNN-Toolkit2工具链,将ONNX模型转换为RV1106 NPU专用的RKNN格式,并完成交叉编译与上板运行。文章重点分享了环境搭建、模型转换的关键步骤以及常见的避坑指南,帮助开发者高效实现边缘AI目标检测应用。

weixin_28677451的博客 913

避开这些坑,你的Python爬虫才能稳定爬取IEEE Xplore(含反爬策略与MongoDB存储实战)

本文详细介绍了如何构建稳定的Python爬虫系统以爬取IEEE Xplore学术论文,包括反爬策略、MongoDB存储优化和断点续传机制。通过动态等待时间算法、请求头指纹管理和会话保持策略,有效应对IEEE的反爬机制。同时,优化MongoDB数据结构和索引,提升存储效率。最后,强调法律合规与伦理考量,确保爬虫合法合规运行。

weixin_29031057的博客 1096

VS2005 多线程问题--窗体中的线程安全调用

http://xylvhp.blog.163.com/blog/static/31123614200711311182051/访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。.NET Framework 有助

www.pingfi.com 1266

【上海大学计算机组成原理实验报告】一、数据传送实验

将58H写入A寄存器//将6BH写入W寄存器//将C3H写入R1寄存器//将C3H写入R1寄存器//了解实验仪器数据总线的控制方式//掌握数据传送的基本原理//掌握各寄存器的结构、工作原理及其控制方法//数据传送实验

HackerKevon的博客 3509

关于vs2005的线程安全性问题以及简化线程调用

   在VS2005加入了线程安全性这个技术,解决了很多线程上的冲突,但从难度来说比VS2003难了,复杂了.尤其用调用线程来改动控件,会出现这不创建这控件的线程的异常.    现在要解决线城安全性问题,以调用线程来改变控件的例子.我们可以用2种方法来实现.   第一,通过托管来来改变控件,这个是最正规,最推荐的方式.但也是最复杂,最让人不想使用.   第二,通过关闭线程安全的检测,回

sqicoo的专栏 886

LLCC68芯片系统架构与LoRa驱动开发核心解析

LoRa射频收发器是低功耗广域物联网(LPWAN)的关键组件,其本质是集成了调制解调器、协议引擎、数据缓冲区与电源管理的专用SoC。理解其工作模式状态机(Sleep/Standby/TX/RX)与SPI主机接口时序规范,是实现稳定通信的基础。LLCC68通过寄存器映射与命令集双接口抽象硬件控制,支持LoRa扩频调制与FSK兼容模式,具备高链路预算(157 dB)和DC-DC/LDO动态电源切换能力。典型应用场景包括远距离传感器节点、智能表计与工业无线监测系统。本文深入剖析LLCC68的信号链路径、中断机制与

weixin_29859471的博客 283

代谢组数据分析(二十六):LC-MS/MS代谢组学和脂质组学数据的分析流程

本教程概述了LC-MS/MS在代谢组学和脂质组学数据分析中的应用流程。首先介绍了样本的采集、提取和LC-MS/MS分析,随后详细阐述了质谱数据的预处理、峰值识别、特征注释,以及数据标准化和统计分析的重要性。特别强调了使用XCMS和CAMERA进行数据对齐和加合物识别,以及利用MultiABLER和LipidFinder进行数据过滤、插补和标准化处理。此外,还介绍了如何应用EigenMS算法进行数据标准化,以及如何使用Limma包进行差异分析。整个流程旨在提高数据质量,确保分析结果的准确性和可靠性,为后续的生

专注生信领域 1955

解决VS2005不能调试线程问题

昨天突然VS2005不能调试线程,网上找了很多方法都不行,后来随意点了几下VS又可以调试线程了。如果遇到同样问题可以试下。(未经过验证,因为不能调试线程的问题没有重现)   方法: 1、工具--选项--调试--取消”在模块加载时取消JIT优化(仅限托管)“ 2、切换到Release下调试程序(最好多调试几次) 3、再切换Debug下调试就可以调试线程了。...

Devilhand 347

YOLOv11改进 | Conv篇 | 2024最新轻量化自适应提取模块LAE助力边缘设备部署计算(附代码 + 修改教程 + 运行教程)

本文给大家带来的一个改进机制是最新由LSM-YOLO提出的轻量化自适应特征提取(Lightweight Adaptive Extraction, LAE)模块,其是LSM-YOLO模型中的关键模块,旨在进行多尺度特征提取,同时降低计算成本。LAE通过以下方式实现更有效的特征提取:多尺度特征提取、自适应特征提取。LAE模块可以在不增加额外参数的情况下提高了模型对ROI区域的检测性能。​欢迎大家订阅我的专栏一起学习YOLO!YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍。

Snu77的博客 4057

C# 线程间操作无效: 从不是创建控件...的解决办法

线程间操作无效: 从不是创建控件“…”的线程访问它。它在VS2003里边不会出现这个问题,在VS2005和VS2008版本里就会出这个问题的,主要是为了安全考虑哦,目前我知道的解决方法有两个… 第一: 使用屏蔽线程间进行不安全监测的方法。 Control.CheckForIllegalCrossThreadCalls= false; 线程开始的时候加这么一句,OK,看不到错误了^_^,啥

Sky 的专栏 1829

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

关于线程间操作无效的处理方法

    最近碰到线程间操作无效,从不是创建空间的线程访问的解决方法的问题,我在Google上找到了原因,原来是在微软的vs2005引入了线程安全的概念,防止滥用线程从而导致找错误的效率降低以及系统的复杂度大大的增加。     方法一:初始化时更改属性System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 但

chengjian008的专栏 1588

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VS2005.NET提示"试图运行项目时出错,无法启动调试,绑定句柄无效"解决办法

VS2005.NET提示"试图运行项目时出错,无法启动调试,绑定句柄无效"解决办法不要急着重装.在菜单栏里面选择"调试">>"开始执行(不调试)"试试,如果这样能成功,就不需要重装两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上。2) 打开项目属性,选择调试选项卡,将“启用Visual Studio宿主进程“一项钩掉。原因是Terminal Services

lvboliang的专栏 2037

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

vs2003升级到vs2005线程对窗体控件引发的错误

关于线程对窗体控件的引用错误用Visual Studio 2005写了个很简单的程序,主要是在主窗体外创建了一个线程,让它专门刷新进度条。曾经在Visual Studio 2003里写过这个程序并且可以正常运行的,2005里却出现了异常。“线程间操作无效:不是从创建它的线程里访问。”哦,后来才发现这是2005的新特点。解决方案:1、可以通过将 CheckForIllegalCrossT

晋嵃 815

多线程环境下的UI异步操作

多线程环境下的UI异步操作 解决VS2005中,线程间不可互操作的问题,一揽子解决方案: 一、首先,定义一个类:SetControlProperty using System.Reflection; using System; using System.Win...

anqian895580的博客 179

VS2005试图运行项目时出错:无法启动调试。绑定句柄无效

VS.NET提示"试图运行项目时出错:无法启动调试。绑定句柄无效"解决办法不要急着重装.在菜单栏里面选择"调试">>"开始执行(不调试)"试试,如果这样能成功,就不需要重装两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上。2) 打开项目属性,选择调试选项卡,将“启用Visual Studio宿主进程“一项钩掉。原因是Terminal Services 被禁

每天进步一点点 2898

线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析

如果代码是在VS2003中的话应该不会抛出这个异常,只有在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常。这是微软为了保证线程安全以及提高代码的效率所做的改进.  以前在VS2003中,我们通常都会忽略这种问题的存在,无限制的使用线程来完成一些工作,但是当系统慢慢变大的时候,这种滥用的线程不但没有提高我们的效率,反而使我们找错误的效率以

筑梦★逐梦 905

线程间操作无效 从不是创建控件 的线程访问它。——解决方法

从VS2005开始就不允许非创建此控件的线程来调用它,那么解决方法是在该控件所在窗体里加上一句话:CheckForIllegalCrossThreadCalls = false;        private void Form1_Load(object sender, EventArgs e)        {            CheckForIllegalCrossThreadCalls = false;           //信号量            signel sgl = new si

PORSCHE~ 523

c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决

如果代码是在VS2003中的话应该不会抛出这个异常,只有在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常。这是微软为了保证线程安全以及提高代码的效率所做的改进.以前在VS2003中,我们通常都会忽略这种问题的存在,无限制的使用线程来完成一些工作,但是当系统慢慢变大的时候,这种滥用的线程不但没有提高我们的效率,反而使

firebird2010的专栏 2807

c# 线程间操作无效: 从不是创建控件“0”的线程访问它

如果代码是在VS2003中的话应该不会抛出这个异常,只有在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常。这是微软为了保证线程安全以及提高代码的效率所做的改进.  以前在VS2003中,我们通常都会忽略这种问题的存在,无限制的使用线程来完成一些工作,但是当系统慢慢变大的时候,这种滥用的线程不但没有提高我们的效率,反而使我们找错误

lpy1016lc的专栏 569

C# 线程间操作无效

<br />最近在写串口通信<br /> <br />今天中午突然遇到一个问题<br /> <br />我在serialport的DataReceived事件中访问 主界面的控件 突然出现了下面的错误<br /> <br /><br /> <br />经过百度 google 知道  这是由于线程安全所造成的 VS2005及以上新增的一个特性 <br /> <br />访问非自己线程的东西 会发生如上类似的错误<br /> <br /> 解决的方法如下<br /> <br />从程序设计上来说,只有创建界面的

爱已走到尽头 恨也放弃承诺 2089
上一篇: windows xp 系统CMD命令大全
下一篇: WinCE下动态显示绘图控件
changesway
博客等级 码龄19年 50粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值