C#多线程与跨线程访问界面控件的方法

作者:寻i 时间:2023-11-25 12:00:29 

本文实例讲述了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#,线程,控件,方法
0
投稿

猜你喜欢

  • Java中文件操作功能小结

    2023-06-20 03:32:28
  • Android--SQLite(增,删,改,查)操作实例代码

    2022-09-04 18:29:48
  • Java基于余弦方法实现的计算相似度算法示例

    2022-06-29 22:02:13
  • spring boot 使用profile来分区配置的操作

    2022-11-27 22:55:15
  • SpringBoot登录验证码实现过程详解

    2023-04-26 12:24:05
  • springboot实现返回文件流

    2023-04-04 22:19:22
  • APK程序获取system权限的方法

    2023-09-05 06:41:49
  • 分享实现Android图片选择的两种方式

    2023-06-28 05:09:27
  • SpringBoot Nacos实现自动刷新

    2023-09-16 04:17:09
  • Java中使用内存映射实现大文件上传实例

    2022-01-16 05:02:16
  • C# 实现dataGridView选中一行右键出现菜单的示例代码

    2022-05-12 05:15:55
  • C#窗体布局方式详解

    2023-09-26 11:17:32
  • C#使用oledb操作excel文件的方法

    2023-06-13 19:19:42
  • Java常用类之System类的使用指南

    2021-09-20 07:54:46
  • Java对象的内存布局详细介绍

    2021-07-28 05:11:38
  • 在当前Activity之上创建悬浮view之WindowManager悬浮窗效果

    2023-02-09 21:02:12
  • C#中if语句使用概述

    2022-08-31 23:22:09
  • Spring实战之@Autowire注解用法详解

    2021-11-17 20:37:19
  • Java创建表格实例详解 <font color=red>原创</font>

    2022-12-22 04:59:13
  • SpringSecurity认证流程详解

    2022-06-25 21:44:49
  • asp之家 软件编程 m.aspxhome.com