孤行Blog

随笔分类 -  Winform

线程间操作无效: 从不是创建控件“...”的线程访问它 问题解决
摘要:错误内容:System.InvalidOperationException: 线程间操作无效: 从不是创建控件“ar_Report”的线程访问它。熟悉使用线程的朋友应该不难发现这个问题。访问 Windows 窗体控件本质上不是线程安全的。如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的 bug,包括争用情况和死锁。确保以线程安全方式访问控件非常重要。.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 Invalid 阅读全文

posted @ 2013-09-03 12:57 孤行 阅读(841) 评论(0) 推荐(0)

C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据
摘要:类文件:C#类文件 using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.Reflection;namespace Common{ public class BardCodeHooK { public delegate void BardCodeDeletegate(BarCodes barCode); public event BardCodeDeletegate BarCodeE... 阅读全文

posted @ 2013-09-03 10:47 孤行 阅读(6385) 评论(3) 推荐(0)

c# BackGroundWorker 多线程操作的小例子
摘要:在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示元,必要进,还要控制后台线程中断当前操作。以前,类似的应用会比较麻烦,需要写的代码较多,也很容易出现异常。在 .net中,提供了一个组件 backgroundworker就是专门解决这个问题的。使用这个组件其实非常简单,例如,我们做一个类似如下界面的进度条的小例子,在后台线程中进行耗时运算,同时刷新界面上的滚动条和提示信息,运行结束后,弹出处理结果。在界面上拖入backgroundWorker组件 阅读全文

posted @ 2013-03-05 16:38 孤行 阅读(148) 评论(0) 推荐(0)