• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#实现跨线程操作控件方法

C#实现跨线程操作控件方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#跨线程访问控件,c#多线程访问控件,c#多线程操作控件,c#线程访问控件,c#线程调用控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C#实现跨线程操作控件方法,分享给大家供大家参考。具体实现方法如下:

由于在.net平台下Winform、wpf禁止跨线程直接访问控件,因此在必须跨线程访问控件的时候采用异步方式。

1、winform项目中跨线程访问控件:

编写一个Winform小实例:在做winform项目中,有时为了将系统运行的状态实时显示到Form中,因此添加一个RichTextbox控件实时显示系统运行日志。本例实现的操作是将日志以字符串的形式写入RichTextbox控件,因为是实时显示,所以涉及到跨线程输入的问题。

public void setText(string txt)
{
    if (this.t_revmsg.InvokeRequired)//等待异步
    {
 setRichTexBox fc = new setRichTexBox(Set);
 this.Invoke(fc, new object []{ txt});
    }
    else
    {
 this.t_revmsg.AppendText(txt);
    }
}

private void Set(string txt)
{
    t_revmsg.AppendText(txt);
}</div>

控件的InvokeRequired的值为true时,说明有一个不属于创建它的线程要访问它,此时需要采用异步的方式进行操作。

2、wpf项目中跨线程访问控件:

wpf的page页中,加入一个button控件和textbox控件,点击button实现添加textbox控件中的内容。

{
    this.textBox1.Dispatcher.Invoke(new WriteDelegate(WriteMethod), "asdf");
}

private delegate void WriteDelegate(string str);
private void WriteMethod(string str)
{
    this.textBox1.AppendText(str);

}</div>

3、wpf项目中跨线程获取textbox控件中的内容

本实例实现的功能是:点击button控件,开启socket监听服务。监听的端口需要从UI界面中的textbox中获取,因为不是创建它的线程访问它,因此才有Dispatcher.Invoke异步操作。稍作补充:在开启监听的过程中,有while(true)死循环,将其直接放入到主线程都会导致线程无法正常进行下去,解决方法是开启一个新的线程来开启监听。

{
    Thread thread = new Thread(new ThreadStart(StartServer));
    thread.Start();
}

public void StartServer()
{
    int port = Convert.ToInt32(GetText(this.tbPort));
    ServerSocket serverSocket = new ServerSocket(port);
    serverSocket.Start();
}

private delegate string GetTextHandle(Control control);
private string GetText(Control control)
{
    if (this.Dispatcher.Thread != System.Threading.Thread.CurrentThread)
    {
 return (string)this.Dispatcher.Invoke(new GetTextHandle(this.GetText), control);
    }
    else
    {
 if (control.GetType() == typeof(TextBox))
 {
     return ((TextBox)control).Text;
 }
 else
 {
     return string.Empty;
 }
    }
}</div>

总结:

由上述几个实例可以看到跨线程调用需要使用Invoke和BeginInvoke(暂时没有用到),在一些要求并不是很严格的系统中,暂且认为二者是可以通用的。感兴趣的朋友可以测试运行一下。通过实践会收获的更多!

希望本文所述对大家的C#程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#子线程执行完后通知主线程的方法
  • C#向线程中传递多个参数的解决方法(两种)
  • C#往线程里传递参数的方法小结
  • C#多线程传递参数及任务用法示例
  • C#多线程与跨线程访问界面控件的方法
  • C#中线程同步对象的方法分析
  • C#实现跨线程操作控件方法
  • C#子线程更新UI控件的方法实例总结
  • C#实现线程安全的简易日志记录方法
  • c#后台线程访问前台控件并显示信息示例

相关文章

  • 2017-05-28C#中添加窗口的步骤详解
  • 2017-05-28使用设计模式中的工厂方法模式进行C#编程的示例讲解
  • 2017-05-28C#操作windows注册表的方法
  • 2017-05-28C#使用xsd文件验证XML格式是否正确的实现方法
  • 2017-05-28C#难点逐个击破(9):类型转换
  • 2017-05-28如何使用C#从word文档中提取图片
  • 2017-05-28解析如何使用反射调用类型成员 方法,字段,属性
  • 2017-05-28C# JsonHelper 操作辅助类,拿来直接用
  • 2017-05-28C#常见的几种集合 ArrayList,Hashtable,List<T>,Dictionary<K,V> 遍历方法对比
  • 2017-05-28C#实现自定义双击事件

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 深入理解C#中new、override、virtual关键字的区别
    • C#基于面向过程计算加权平均分的方法
    • C#默认双缓冲技术实例分析
    • C#将hashtable值转换到数组中的方法
    • C#中抽象类与接口的区别详解
    • c#单例模式(Singleton)的6种实现
    • C#生成单页静态页简单实例
    • C#实现排列组合算法完整实例
    • C#私有构造函数使用示例
    • 在C#使用字典存储事件示例及实现自定义事件访问器

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有