我有以下C#代码:
using System;
using System.Windows.Forms;
namespace WinFormErrorExample
{
public partial class Form1 : Form
{
public static Form1 Instance;
public Form1()
{
Instance = this;
InitializeComponent();
}
public void ChangeLabel1Text(String msg)
{
if (InvokeRequired)
Invoke(new Action<String>(m => label1.Text = m), new object[] {msg});
else
label1.Text = msg;
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Instance.ChangeLabel1Text("cool");
}
}
}
}
当我正在调用Instance.ChangeLabel1Text("cool");
时,GUI中没有发生任何事情。
这是我编写的一个小程序,用于在更大的程序中显示我的问题。
为什么GUI没有更新?
答案 0 :(得分:2)
致电
Application.Run(new Form1());
阻止您的应用程序,直到Form1关闭。因此,在您尝试关闭
之前,不会执行后续行当然,如果您只想测试Instance调用的功能,请在Application.Run之后删除该行。相反,您需要创建一个单独的线程,尝试在Form1当前实例上调用该方法
答案 1 :(得分:0)
这样做,
首先将文本设置为文本框控件,然后设置Run()
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 form = new Form1();
form.Controls["ChangeLabel1Text"].Text = "cool";
Application.Run(form);
答案 2 :(得分:0)
Application.Run(new Form1());
方法调用执行在当前线程上运行标准应用程序消息循环。因此,当应用程序关闭时,将执行此行Instance.ChangeLabel1Text("cool");
。
为什么不在构造函数中更改标签的文本?不需要静态变量。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ChangeLabel1Text("Hello!");
}
}