C#多线程与跨线程访问界面控件的方法
本文实例讲述了C#多线程与跨线程访问界面控件的方法。分享给大家供大家参考。具体分析如下:
在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象。启用新线程去访问WebService是一个可行的方法。
典型的,有下面的启动新线程示例:
private void LoadRemoteAppVersion()
{
if (FileName.Text.Trim() == "") return;
StatusLabel.Text = "正在加载";
S_Controllers_Bins.S_Controllers_BinsSoapClient service = new S_Controllers_Bins.S_Controllers_BinsSoapClient();
S_Controllers_Bins.Controllers_Bins m = service.QueryFileName(FileName.Text.Trim());
if (m != null)
{
//todo:
StatusLabel.Text = "加载成功";
}else
StatusLabel.Text = "加载失败";
}
private void BtnLoadBinInformation(object sender, EventArgs e)
{
Thread nonParameterThread = new Thread(new ThreadStart(LoadRemoteAppVersion));
nonParameterThread.Start();
}
运行程序的时候,如果要在线程里操作界面控件,可能会提示不能跨线程访问界面控件,有两种处理方法:
1.启动程序改一下:
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
2.使用委托
public delegate void LoadRemoteAppVersionDelegate(); //定义委托变量
private void BtnLoadBinInformation(object sender, EventArgs e)
{
LoadRemoteAppVersionDelegate func = new LoadRemoteAppVersionDelegate(LoadRemoteAppVersion);//<span style="font-family: Arial, Helvetica, sans-serif;">LoadRemoteAppVersion不用修改</span>
func.BeginInvoke(null, null);
}
希望本文所述对大家的C#程序设计有所帮助。
相关推荐
-
C#实现用户自定义控件中嵌入自己的图标
本文实例讲述了C#实现用户自定义控件中嵌入自己的图标.分享给大家供大家参考,具体如下: 下面给出一下具体的步骤. 1. 新建一个用户控件 2. 向资源文件是添加一张图片,图片格式可以是bm,ico 大小最好是 16 * 16 啦! 3. 选中用户控件图标,单击"右键>属性"把 "生成操作 的属性值改为:嵌入的资源(Action Resource) 4. 第四步: [ToolboxBitmap(typeof(CutPitureNew_WPF), "CutPitu
-
C# Winform 子窗体访问父级窗体的控件和属性
今天在做一个联系人管理的C#设计时,遇到了这个问题,我需要将父窗体中的textBox中的值传到子窗体并进行数据库查询操作,我用了new 父窗体().textBox.text;来进行值传递,然而并无卵用,经过多次试验,找到了一个比较简单的解决方法: 一.子窗体调用父窗体的静态变量 父窗体:Logout 子窗体:Affirm 父窗体文本框:tB_Logout_Username public partial class Logout : Form { //定义一个静态变量存放父窗体中的文本框的值 pu
-
C#后台创建控件并获取值的方法
本文实例讲述了C#后台创建控件并获取值的方法.分享给大家供大家参考.具体实现方法如下: 前台代码: 复制代码 代码如下: <form id="form1" runat="server"> <div> <div class="item"> Please input a number: <asp:TextBox runat="s
-
C#实现简单的loading提示控件实例代码
自己画一个转圈圈的控件 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows
-
C#使用Aspose.Cells控件读取Excel
Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的功能,读取Excel的数据并导入到Dataset或数据库中.读取Excel表格数据的代码如下: 首先要引入命名空间:using Aspose.Cells; 复制代码 代码如下: Workbook workbook = new Workbook(); workbook.Open("C:\\test.x
-
C#日期控件datetimepicker保存空值的三种方法
方法一(推荐): 设置datetimepicker的属性ShowCheckBox为true 在窗口初始化时候,添加代码this.datetimepicker1.Checked = false; 保存日期值入库的时候,就可以根据if(this.datetimepicker1.Checked ==false),保存空值. 方法二: 在窗口初始化函数中添加: 复制代码 代码如下: this.dateTimePicker1.Format=DateTimePickerFormat.Custom; this
-
C#实现读取DataSet数据并显示在ListView控件中的方法
本文实例讲述了C#实现读取DataSet数据并显示在ListView控件中的方法.分享给大家供大家参考.具体如下: /*lvStudentList为ListView控件名 */ DataSet ds = new DataSet(); ds = student.QueryStudents(); //查询表的信息 int rowCount, columnCount,i,j; rowCount = ds.Tables[0].Rows.Count; columnCount = ds.Tables[0].
-
C#实现DataGridView控件行列互换的方法
本文实例讲述了C#实现DataGridView控件行列互换的方法.分享给大家供大家参考.具体如下: 该示例程序是一个Windows窗体应用程序,有左右两个DataGridView控件:dgvLeft和dgvRight dgvRight除时间外的每一行是dgvLeft的一列 private void Form1_Load(object sender, EventArgs e) { //C#中确定控件DataGridView根据内容自动调整列宽长度的属性 //是AutoSizeColumnsMode
-
C#实现多选项卡的浏览器控件
本文详细为大家分享了C#多选项卡的浏览器控件的设计与实现,供大家参考,具体内容如下 1. 为什么我们需要多选项卡的浏览器控件 项目中需要使用WinForm应用程序来包装BS应用程序的浏览器外壳,在.NET的WebBrowser中没有多选项卡浏览的自带配置属性,我们需要实现多选项卡的浏览器控件来实现包装BS应用程序的目的,而不会弹出IE浏览器窗口. 2. 我们需要了解哪些知识点 2.1. WebBrowser控件 WebBrowser 控件为 WebBrowser ActiveX 控件提
-
C#多线程与跨线程访问界面控件的方法
本文实例讲述了C#多线程与跨线程访问界面控件的方法.分享给大家供大家参考.具体分析如下: 在编写WinForm访问WebService时,常会遇到因为网络延迟造成界面卡死的现象.启用新线程去访问WebService是一个可行的方法. 典型的,有下面的启动新线程示例: 复制代码 代码如下: private void LoadRemoteAppVersion() { if (FileName.Text.Trim() == "") return; StatusLabel
-
浅谈C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题
如何:对 Windows 窗体控件进行线程安全调用 访问 Windows 窗体控件本质上不是线程安全的. 如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态. 还可能会出现其他与线程相关的 Bug,例如争用情况和死锁. 确保以线程安全方式访问控件非常重要. 在未使用 Invoke 方法的情况下,从不是创建某个控件的线程的其他线程调用该控件是不安全的. 以下非线程安全的调用的示例. // This event handler creates a thread that
-
C#子线程更新UI控件的方法实例总结
本文实例总结了C#子线程更新UI控件的方法,对于桌面应用程序设计的UI界面控制来说非常有实用价值.分享给大家供大家参考之用.具体分析如下: 一般在winform C/S程序中经常会在子线程中更新控件的情况,桌面程序UI线程是主线程,当试图从子线程直接修改控件属性时会出现"从不是创建控件的线程访问它"的异常提示. 跨线程更新UI控件的常用方法有两种: 1.使用控件自身的invoke/BeginInvoke方法 2.使用SynchronizationContext的Post/Send方法更
-
c#后台线程访问前台控件并显示信息示例
复制代码 代码如下: //设置为后台线程 Thread th = new Thread(delegate() { append();});th.IsBackground = true;th.Start(); //在append方法里面需要调用前台控件 public void append(){ // ... 业务处理 this.Invoke(new flushMessage(showMessage), new object[] { row["Code"].ToString(), res
-
C#多线程异步执行和跨线程访问控件Helper
一.工具类代码 public class TaskHelper { #region 多线程操作 /// <summary> /// 功能描述:多线程执行方法,方法无参数,无返回值 /// </summary> /// <param name="func">方法,如果方法中调用了控件,请使用 ThreadInvokerControl(() => { 您的操作})进行包括</param> /// <param name="
-
C#之WinForm跨线程访问控件实例
本文实例讲述了C#中WinForm跨线程访问控件的实现方法,分享给大家供大家参考. 具体实现方法如下: 1.跨线程访问控件委托和类的定义 复制代码 代码如下: using System; using System.Windows.Forms; namespace ahwildlife.Utils { /// <summary> /// 跨线程访问控件的委托 /// </summary> public delegate void InvokeDeleg
-
c#中多线程访问winform控件的若干问题小结
我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来解决这个问题,下面我将详细的介绍. 首先来看传统方法: 复制代码 代码如下: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender,
-
Winform中如何跨线程访问UI元素
在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应, 同时我们又需要在工作线程中更新UI界面上的控件.但直接访问会出现"线程间操作无效"的情况,因为.NET禁止了跨线程调用控件, 否则谁都可以操作控件,最后可能造成错误. 下面介绍几种跨线程访问的方法: 1.禁止对跨线程访问做检查 (不推荐使用这种方法) 这种方法不检查跨线程访问,允许各个线程操作UI元素,容易出现错误. public Form2() { InitializeComponent(); //禁
-
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控件有:单行文本框.多行文本框.密码文本框.下拉列表Combobox.日期输入控件.数值输入控件.单项选择.复选框.表格控件DataGrid.树形控件.布局控件.弹出式对话框.提示信息.列表控件等,这些界面控件的操作都有哪些不同,下面我们来逐一进行介绍. 1.单行文本框 使用easyui的控件,单行文
-
Android线程中设置控件的值提示报错的解决方法
本文实例讲述了Android线程中设置控件的值提示报错的解决方法.分享给大家供大家参考,具体如下: 在Android线程中设置控件的值一般会与Handler联合使用,如下: package com.yarin.android.Examples_04_15; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import andro
随机推荐
- 跟老齐学Python之使用Python操作数据库(1)
- 微信 小程序前端源码详解及实例分析
- 浅析Java Web错误/异常处理页面
- 详解Spring Boot实战之Filter实现使用JWT进行接口认证
- IOS实现聊天界面底部菜单栏效果
- CentOS 下yum安装mysql、jdk和tomcat的方法
- MVC使用Controller代替Filter完成登录验证(Session校验)学习笔记5
- javascript鼠标滑过显示二级菜单特效
- PHP实现将textarea的值根据回车换行拆分至数组
- linux 下实现python多版本安装实践
- RHEL7使用ssm命令管理LVM的方法
- LINUX 查找tomcat日志关键词命令
- 超强的IE背景图片闪烁(抖动)的解决办法
- Java4Android开发教程(三)java基本概念
- mongodb+php实现简单的增删改查
- 改造ctrl+alt+del(默认重启)为一个信息搜集脚本的脚本
- Android仿银行客户签名并且保存签名的截图文件并命名为本地时间
- Jquery把获取到的input值转换成json
- js菜单代码js菜单特效代码
- Bootstrap模态框水平垂直居中与增加拖拽功能