C# 类中的线程 如何给窗体中的控件赋值

问题描述

如:项目中现有个窗体名称为FrmMain这个窗体中个ListBox控件然后FrmMain窗体中调用RunClass类的Run()方法RunClass类如下:其中类中一个启动线程的方法ThreadcstTread;//启动线程的办法publicvoidrun(){cstTread=newThread(newThreadStart(start));cstTread.Start();}//线程中调用的方法publicvoidstart(){while(true){//问题来了,我想要在这里给FrmMain窗体中的ListBox.Item.Add("我要添加数据");(类和窗体必须分开)}}

解决方案

解决方案二:
在线程中访问UI,需要使用委托例如this.Invoke(newAction(()=>{label1.Text=text;}));

解决方案三:
首先,你要在一个类里调用另一个类里的对象,被调用的对象必须是public类型,然后你还要把这个对象传入调用它的类里去其次,跨线程操作UI,需要用委托
解决方案四:
引用楼主Cai_Ethan的回复:

...类和窗体必须分开...

从解耦的角度看,RunClass可以公开一个事件,比如叫OperationProgress事件。感兴趣者,比如FrmMain,可以订阅该事件,并用合适的方式更新UI。
解决方案五:
谢谢各位楼上的回复,小弟已经把问题解决了。
解决方案六:
引用4楼Cai_Ethan的回复:

谢谢各位楼上的回复,小弟已经把问题解决了。

请问你是怎么解决的,能否赐教,谢谢!

时间: 2024-07-29 17:48:27

C# 类中的线程 如何给窗体中的控件赋值的相关文章

如何在一个非窗体类中对窗体中的某一个控件赋值

问题描述 我在一个类里面获取了一个值,想在某个事件下对主窗体的一个控件属性赋值,怎么办?我声明了主窗体类后,对控件属性赋值,调试中发现有值,但是主窗体中就是不显示??publicvoidOnMouseDown(intbutton,intshift,intx,inty){Form1m_form=newForm1();m_form.StatusLabel.Text=a.ToString();} 解决方案 解决方案二:第一种方案:将你的窗体上的StatusLabel设为public第二种方案:通过属性

Android实现在列表List中显示半透明小窗体效果的控件用法详解_Android

本文实例讲述了Android实现在列表List中显示半透明小窗体效果的控件用法.分享给大家供大家参考,具体如下: Android 在列表List中显示半透明小窗体效果的控件,多的不多直接上代码,要说的都在注释里了: import com.hiapk.market.R; import android.content.Context; import android.graphics.PixelFormat; import android.os.Handler; import android.view

编码-C#中线程里调用winform上的控件,问题。求助。

问题描述 C#中线程里调用winform上的控件,问题.求助. 废话不多说,我直接贴代码了.程序很简单.我摘抄的网上的. 上图是个界面. 然后程序里先是一个类.如下: class ClientThread { Encoding encoding = Encoding.GetEncoding("GB2312"); private Socket client; public string data = null; private byte[] receiveBytes = new byte

在Delphi中巧改窗体文件实现控件数组

delphi 开发的应用中,每一个窗体都有一个对应的窗体文件(.dfm),用来记录该窗体的属性以及窗体上所有控件的属性,以便在窗体关闭后能准确地重新生成窗体.几乎所有的DELPHI参考书都没有提到过该文件的具体情况,偶尔提到,也都泛泛而谈,因为窗体文件是二进制文件,只有在DELPHI提供的编辑环境中才能看到它的本来面目,对其进行操作可能会出现不可预知的错误:而且在大多数情况下,确实没有修改的必要.而本文谈到的和窗体文件密切相关. 要利用窗体文件,首先必须了解该类型文件的结构.窗体文件的结构很简单

view类中怎么访问属性栏上的属性网格控件?

问题描述 view类中怎么访问属性栏上的属性网格控件? 小弟在做一个MFC绘图的程序,需要在绘图区中点击相应的图形,如直线,在右侧的属性栏上显示对应图形的参数,使用成员变量的形式访问会出现内存冲突的问题,求高手解答,O(∩_∩)O谢谢! 解决方案 可以通过主框架窗口来中转,在View中很容易访问主框架窗口(比如通过AfxGetMainWnd() SDI程序),在CMainFrame类中肯定定义了相关的属性类的对象成员.

C#中winform窗体的WindowsMediaPlayer控件怎么播放不了视频

问题描述 C#中winform窗体的WindowsMediaPlayer控件怎么播放不了视频 在控件中播放就这样 在系统中的播放器播放就能播 解决方案 你好,解决方案如下: 1.WindowsMediaPlayer不支持某些格式的文件如.rmvb格式,安装解码. 2.加上this.wmpPlayer.Controls.Play试试. 3.this.wmpPlayer.URL = "视频路径名" 解决方案二: ..............

delphi 中fastreport 如何像在窗体中一样 使用adoquery

问题描述 本人新手,对于fastreport控件知之甚少,想了解下delphi中fastreport如何像在窗体中一样动态的使用adoquery,能够给fastreport中的报表控件赋值 解决方案 解决方案二:报表里也有ADO,本来就是和程序一样使用的.解决方案三:看了fastreport自带的demo->main才知道这些,继续学习....解决方案四:demo的确重要,我用finereport也是自带demo,多学学会有收获的

C#中父窗口和子窗口之间实现控件互操作

父窗口|控件|子窗口 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件.相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可. 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异: 第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: public static yourMainWindow pCurrentWin = null; 然后在主窗体构造函数中,给静态成员初始化,如下: pCurrentWin = t

C# 窗体上 Label控件 实时刷新 显示当前时间

问题描述 我用了while(true){label.Text=DateTime.Now.Second.ToString();} 可是程序就停止响应请问高手怎么办才好 解决方案 解决方案二:怎么能让他不停地更新而且我还能进行其他操作,如果叫我就timer就不用了解决方案三:while (true)            {                label.Text = DateTime.Now.Second.ToString();Application.DoEvents();System