Winform跨线程操作的简单方法
分析:label标签控件是主线程创建的,不能直接从另一个线程访问.可以这样认为:不能跨线程直接访问控件;
最简单的办法就是:
using System.Windows.Forms;
Parent.Invoke(new MethodInvoker(delegate
{
Parent.label1.Text = "成功" ;
}));
其中,“Parent”是主窗体名称。 这样,我们就是在需要窗体控件产生变化的时候,发消息通知主窗体改变控件。这就完全避免了跨线程操作控件。
相关推荐
-
C#之WinForm跨线程访问控件实例
本文实例讲述了C#中WinForm跨线程访问控件的实现方法,分享给大家供大家参考. 具体实现方法如下: 1.跨线程访问控件委托和类的定义 复制代码 代码如下: using System; using System.Windows.Forms; namespace ahwildlife.Utils { /// <summary> /// 跨线程访问控件的委托 /// </summary> public delegate void InvokeDeleg
-
C#之WinForm WebBrowser实用技巧汇总
本文实例汇总了C#中WinForm WebBrowser常见的实用技巧,对于C#程序开发来说有不错的借鉴价值.分别叙述如下: 方法1:获取状态栏信息 void webBrowser1_StatusTextChanged(object sender, EventArgs e) { label1.Text = webBrowser1.StatusText; } 方法2:页面跳转后改变地址栏地址 //在Navigated事件处理函数中改变地址栏地址是最恰当的: private void webBrow
-
c# winform多线程的小例子
在文本框中输入一个数字,点击开始累加按钮,程序计算从1开始累计到该数字的结果.因为该累加过程比较耗时,如果直接在UI线程中进行,那么当前窗口将出现假死.为了有更好的用户体验,程序启动一个新的线程来单独执行该计算,然后每隔200毫秒读取一次累加结果,并把结果显示到文本框下方的label控件中.同时,程序支持取消操作,点击取消累计按钮,程序将取消累加操作,并把当前累加值显示到label中.为了方便后面的描述,我把UI线程称作主线程,把执行累加计算的线程称作工作者线程.该过程有两个关键点: 1:如何在
-
winform开发使用通用多线程基类分享(以队列形式)
复制代码 代码如下: /// <summary> /// 队列多线程,T 代表处理的单个类型~ /// </summary> /// <typeparam name="T"></typeparam> public abstract class QueueThreadBase<T> { #region 变量&属性 /// <summary>
-
C#中Winform窗体Form的关闭按钮变灰色的方法
本文实例讲述了C#中Winform窗体Form的关闭按钮变灰色的方法,对C#程序设计有一定的借鉴价值,分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: [ DllImport ( "USER32.DLL" ) ] public static extern int GetSystemMenu(int hwnd, int bRevert); [ DllImport ( "USER32.DLL" ) ] public static extern int Rem
-
C#实现WinForm捕获最小化事件的方法
一般来说,虽然Form类没有提供Minimize的事件,但还是可以通过重载Deactive来实现WinForm捕获最小化事件. 实现方法为:当Form失去焦点后,测试WindowState取得Form状态,若为Minimized既是最小化事件. 本例为最小化后隐藏窗口: 还有种方法更加直接,重载WndProc: 实现代码如下: const int WM_SYSCOMMAND = 0x112; const int SC_CLOSE = 0xF060; const int SC_MINIMIZE =
-
C#中让控件全屏显示的实现代码(WinForm)
1.使用winapi "SetParent" 接口: 复制代码 代码如下: [DllImport("user32.dll", SetLastError = true)] static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 复制代码 代码如下: control.Dock = DockStyle.None; control.Left = 0; control.Top = 0; c
-
c# winform 关闭窗体时同时结束线程实现思路
前不久,做一个winform小程序,是给客户导数据用的.当时就发现调试的时候,线程有点问题,到某个点时就走不动了.但是运行确实没有问题的. 只是在关闭窗体后,资源管理器里,一大堆进程. 当时,客户急着用,小测了下,导出数据无误,进程就先不管了. 后来自己去查资料,发现只要在线程那里设置个属性 复制代码 代码如下: Thread th = new Thread(Excute); th.IsBackground = true;这样就解决问题了. 这个属性的意思就是把线程设置为后台线程. 然后关闭进程
-
C# WinForm窗体编程中处理数字的正确操作方法
使用C#进行WinForm开发时,经常需要从WinForm窗体中获取用户输入数据.如果是字符串,那很好办,直接使用"控件名.Text"即可.但如果是数字类型的值呢?怎么样获取?怎么样判断?怎么样转换?怎么样错误提示?且看下文. 假如我要从WinForm界面上获取一个用户输入的数字,代码如下: 复制代码 代码如下: int num; //定义一个int类型的变量来接收值 //假设接收用户输入的文本框控件名称为"txtNum",txtNum.Text为字符串类型. //
-
深入分析C#中WinForm控件之Dock顺序调整的详解
最近被.net winform中的控件布局搞困惑了,由于控件都是使用Dock方式的,操作起来也是比较方便,如果最大化,窗口大小调整等,都可以随着窗口大小的变化而变化.但问题是,.net winform的dock方式是根据先添加的控件顺序进行优先级Dock排列的,假设我想目前有三个控件A.B.C分别以 Top.Bottom以及Fill方式填充窗口即窗口看起来应该是这样的:---------------------A---------------------C--------------------
-
c#中多线程访问winform控件的若干问题小结
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来解决这个问题,下面我将详细的介绍. 首先来看传统方法: 复制代码 代码如下: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender,
-
在多线程中调用winform窗体控件的实现方法
本文实例讲述了在C#中实现多线程中调用winform窗体控件的方法,对于C#程序设计的学习有着很好的借鉴参考价值.具体方法如下: 首先,由于Windows窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态.还可能出现其他与线程相关的 bug,包括争用和死锁的情况.于是在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用该控件,则调试器会引发一个 InvalidOperationExceptio
随机推荐
- mac下使用brew 安装mongodb的方法教程
- oracle impdp network_link参数使用介绍
- Go语言实现的最简单数独解法
- 浅谈 javascript 事件处理
- C#对象与XMl文件之间的相互转换
- 批处理方式实现的目录比较工具
- python使用arcpy.mapping模块批量出图
- jquery实现居中弹出层代码
- jQuery之浮动窗口实现代码(两种方法)
- 跨浏览器开发经验总结(四) 怎么写入剪贴板
- java 中使用maven shade plugin 打可执行Jar包
- a标签的href和onclick 的事件的区别介绍
- javascript 嵌套的函数(作用域链)
- Android自定义带增长动画和点击弹窗提示效果的柱状图DEMO
- URL中去除指定参数实现C#代码
- PHP添加Xdebug扩展的方法
- Python中的默认参数实例分析
- Java责任链模式模板代码分享
- 详解Spring Cloud Feign 熔断配置的一些小坑
- Android工具栏顶出转场动画的实现方法实例