AndreaDO

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

C#中其他线程获取UI信息

C#中其他线程获取UI信息

使用委托方式

在除了主线程的时候获取UI的内容,有时候会出现意想不到的异常报错,为了避免这种情况,使用委托是最好的选择。
如下,例子是其他线程获取控件中的Text内容。

//  委托
       /// <summary>
       /// 获取控件Text的委托
       /// </summary>
       /// <param name="control">winform控件</param>
       /// <returns>返回控件的Text内容</returns>
       public delegate string getControlTextDelegate(Control control);

       /// <summary>
       /// 设置控件的Text内容的委托
       /// </summary>
       /// <param name="control">winform控件</param>
       /// <param name="text">控件Text的新内容</param>
       public delegate void setControlTextDelegate(Control control, string text);
//变量
  public getControlTextDelegate getCText { get; set; }  //获取控件Text
       public setControlTextDelegate setCText { get; set; }  //设置控件Text

//函数
   /// <summary>
       /// 获取winfrom中控件的Text内容
       /// </summary>
       /// <param name="control"></param>
       /// <returns></returns>
         string getText(Control control)
       {
           //判断当前线程是否是主线程 
           if (Thread.CurrentThread.ManagedThreadId != mainThreadId)
           {
               return (string)control.Invoke(new Func<Control, string>(getText), control);
           }
           else
               return control.Text;
       }

       /// <summary>
       /// 设置控件的Text内容为text参数
       /// </summary>
       /// <param name="control">目标控件</param>
       /// <param name="text">设置内容</param>
         void setText(Control control, string text)
       {
           //判断是否是主线程 
           if (Thread.CurrentThread.ManagedThreadId != mainThreadId)
           {
               control.Invoke(new Action<Control, string>(setText), control, text);
           }
           else
               control.Text = text;
       }

//省略。。。
//主函数中初始化变量
   getCText = new getControlTextDelegate(getText);
  setCText = new setControlTextDelegate(setText);

这样我们在其他线程中使用上面的委托变量就可以直接获取控件的Text内容或者设置Text内容了

posted on   AndreaDO  阅读(43)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示