当前位置: 首页 > 编程笔记 >

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

洪梓
2023-03-14
本文向大家介绍C#多线程与跨线程访问界面控件的方法,包括了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#之WinForm跨线程访问控件实例,包括了C#之WinForm跨线程访问控件实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#中WinForm跨线程访问控件的实现方法,分享给大家供大家参考。 具体实现方法如下: 1、跨线程访问控件委托和类的定义 2、用法 在Form1.cs文件的线程方法中: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#实现跨线程操作控件方法,包括了C#实现跨线程操作控件方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现跨线程操作控件方法,分享给大家供大家参考。具体实现方法如下: 由于在.net平台下Winform、wpf禁止跨线程直接访问控件,因此在必须跨线程访问控件的时候采用异步方式。 1、winform项目中跨线程访问控件: 编写一个Winform小实例:在做winfor

  • 主要内容:线程生命周期,主线程,Thread 类中的属性和方法,创建线程,管理线程,销毁线程多线程就是多个线程同时工作的过程,我们可以将线程看作是程序的执行路径,每个线程都定义了一个独特的控制流,用来完成特定的任务。如果您的应用程序涉及到复杂且耗时的操作,那么使用多线程来执行是非常有益的。使用多线程可以节省 CPU 资源,同时提高应用程序的执行效率,例如现代操作系统对并发编程的实现就用到了多线程。到目前为止我们编写的示例程序都是单线程的应用程序,这样的应用程序一次只能执行一个任务。 线程

  • 多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。 基于进程的多任务处理是程序的并发执行。 基于线程的多任务处理是同一程序的片段的并发执行。 多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。 本教程假设您使用的是 Linux 操作系统,我们要使用

  • 我创建了3个线程,它们正在访问外部类的内部类。 在输出中,我可以看到类中的静态变量没有按顺序更新。 如果有人能解释在多线程情况下如何处理内部类,将会有很大帮助?我们能同步整个内部类吗? 事先谢谢你的帮助。

  • 我正在尝试将一系列参数传递给不同的c线程。当NumThreads == 1时,程序运行良好,但是当NumThreads 创建线程的位置: 并且成员函数被调用: 来自前三个线程的控制台输出:{ 所以ID和样本索引被正确地传递给了线程,但是srcPoint怎么对所有三个线程都是相同的呢?!?