我正在使用c#的Windows应用程序。从另一种形式更改文本属性或控件的任何属性
我有一个从说X,其中我有一个标签说LABEL1,这从代码级X.cs x是
继承类说FormManager.cs(自定义的方法来控制
通用的功能表格载入或窗体关闭的所有表单)。我运行在一个FormManager.cs线程来执行
一些重复的任务,并从那里我想回到label1的标签文本从
这FormManager.cs类改改。我怎样才能做到这一点。
我正在使用c#的Windows应用程序。从另一种形式更改文本属性或控件的任何属性
我有一个从说X,其中我有一个标签说LABEL1,这从代码级X.cs x是
继承类说FormManager.cs(自定义的方法来控制
通用的功能表格载入或窗体关闭的所有表单)。我运行在一个FormManager.cs线程来执行
一些重复的任务,并从那里我想回到label1的标签文本从
这FormManager.cs类改改。我怎样才能做到这一点。
Invoke
,以便UI更新将在UI线程中执行。下面是一个实现的例子:FormManager
形式:
public partial class FormManager : Form
{
public FormManager()
{
InitializeComponent();
}
public Action BackgroundActionCompleted { get; set; }
public void OnBackgroundActionCompleted()
{
if (this.BackgroundActionCompleted != null)
{
// Invoke so the action will be launched on the UI thread
this.Invoke(this.BackgroundActionCompleted);
}
}
}
X
形式:
public partial class X : FormManager
{
public X()
{
InitializeComponent();
}
private void X_Load(object sender, EventArgs e)
{
this.BackgroundActionCompleted = delegate() { this.label2.Text = "New Text"; };
}
}
基类无法看到子属性。
但是你可以在你的线程上的基类
abstract void UpdateLabel();
调用它,然后实现在派生类中这个方法,你可以访问Label1的对象。
记住,从不同的线程更新UI对象,你可以需要使用Invoke()