C#多线程与跨线程访问界面控件的方法
作者:寻i 发布时间:2023-11-25 12:00:29
标签: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#程序设计有所帮助。


猜你喜欢
- 首先微信公众号开发网页授权登录使用环境:开发工具:eclipse;服务器:tomcat8,开发语言:JAVA。我写的网页授权登录时用开发者模
- 图的实际应用在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。地图:我
- 线程组线程组可以批量管理线程和线程组对象。一级关联例子如下,建立一级关联。public class MyThread43 implement
- Bluetooth结构1、JAVA层frameworks/base/core/java/android/bluetooth/包含了bluet
- 本文实例讲述了Java排序算法总结之希尔排序。分享给大家供大家参考。具体分析如下:前言:希尔排序(Shell Sort)是插入排序的一种。是
- 我们知道:int i = 5;long j = 7;i = i + j不能编译,但i += j却能编译运行,结果i = 12。这是因为:i
- 在ajaxcontroltoolkit-a2a6dc6854e0\Client\MicrosoftAjax.Extended\Extende
- Java多线程综合案例数字加减设计4个线程对象,两个线程执行减操作,两个线程执行加操作public class ThreadDemo{ &n
- 简单几步,实现SpringMVC+servlet3.0文件上传功能:第一步:配置web.xml文件中的servlet,添加multipart
- Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。
- 作为Android开发者,工作中少不了要反编译别人的apk,当然主要目的还是为了学习到更多,取彼之长,补己之短。今天就来总结一下Androi
- 本片shader实现的效果是模型腐蚀消失,且腐蚀的边缘大小可以调、颜色可调。效果图如下:设置面板如下:使用时需要给ClipMask参数给一张
- 前言在你的工作中,有时候可能会看到 @Accessors(chain = true) 这样的注解,他是 lo
- 本文实例讲述了Android实现ListView数据动态加载的方法。分享给大家供大家参考,具体如下:list.setOnScrollList
- 本文实例讲述了C#实现的算24点游戏算法。分享给大家供大家参考。具体如下:using System;using System.Collect
- Spring SecuritySpring Security是能够为J2EE项目提供综合性的安全访问控制解决方案的安全框架。它依赖于Serv
- 在新版的AndroidStudio3.6 中,在项目的包下新建 activity 时,一般会同时生成对应的java和xml文件,例如新建 M
- jar文件包括java普通类、资源文件和普通文件,在maven中即是打包src/main/java和src/main/resources资源
- 参考视频:https://www.bilibili.com/video/BV1Bq4y1Q7GZ?p=4通过视频的学习和自身的理解整理出的笔
- 准备工作工具:idea+jdk8技术要求:java基础语法编码环节首先,我们得先确定下来,用什么数据来模拟栈的操作。由于是一个一个的元素放入