我有一个名为MyForm
的表单,我想在程序执行过程中从类本身外部编辑它的属性。
这是我得到的:
static void Main()
{
MyForm main = new MyForm();
main.ShowDialog();
main.Text = "Hello";
}
但是,似乎ShowDialog()
只是冻结程序,直到我关闭表单,因此在我关闭表单之前不会执行main.Text = "Hello";
。
我也尝试使用main.Show()
,但只是在我执行Main()
函数中的所有代码后关闭了表单,因此文本"Hello"
只会快速闪烁。
我需要它以便我可以随时打开表单并在程序执行过程中从类本身外部更改它的控件。
我怎样才能做到这一点?我应该在不同的线程中运行表单吗?
答案 0 :(得分:3)
这里有多个问题,您应该尝试一次关注一个问题,所以让我强调一下这些问题。
数目:
Application.Run(main);
,显示表单并等待它关闭。Show
而不是ShowDialog
,但由于您没有其他表单保持程序打开,您的程序将关闭。显示表单后显示返回,返回到程序正在执行的任何操作。在你的情况下,该程序没有任何事情要做,所以它终止。答案 1 :(得分:1)
首先,我不知道你的具体情况是什么。也许我的解决方案对你有好处,但如果不是,请尝试告诉我们你想要达到的目标。
static void Main()
{
var main = new MyForm();
//Initialize a new thread with the `DoSomething()` method
//and pass the form as a parameter
var thread = new Thread(() => DoSomething(main)) {IsBackground = true};
thread.Start();
main.ShowDialog();
}
static void DoSomething(MyForm main) {
//Update the form title
main.Text = "Hello";
//Wait one second
Thread.Sleep(1000);
//Update the form title again
main.Text = "World";
}