C#窗体在运行时添加控件
您好,在运行时向窗体添加控件时遇到困难C#窗体在运行时添加控件,c#,forms,asynchronous,C#,Forms,Asynchronous,您好,在运行时向窗体添加控件时遇到困难 static Form1 f2 = new Form1(); async public static void startTimer() { //await Task.Run(() => f2.ShowDialog()); stopWatch.Start(); aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
static Form1 f2 = new Form1();
async public static void startTimer()
{
//await Task.Run(() => f2.ShowDialog());
stopWatch.Start();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 50;
aTimer.Enabled = true;
await Task.Run(() => f2.ShowDialog());
}
public static void splitTime()
{
TextBox txtRun = new TextBox();
txtRun.Name = "txtDynamic";
txtRun.Location = new System.Drawing.Point(20, 18 + (20 * 2));
txtRun.Size = new System.Drawing.Size(200, 25);
f2.Controls.Add(txtRun);
}
知道为什么会失败吗?我认为是因为异步,但不知道如何解决它。加载事件在哪里?在哪里调用
splitTime
方法<代码>为什么失败这是什么意思?你有什么错误吗?这是有效的,我会尽快接受它作为答案。谢谢,你也可以简单地解释一下为什么这是我想要理解的解决方案。还有,你知道我如何从其他函数f2.txtRun.Text=“test”访问这个创建的控件吗;显然,这是行不通的,也不会得到认可。国际海事组织,这不应该是公认的答案。这个问题看起来很像。是的,这个答案似乎固定了你所问问题的一部分,但在帮助你构建整个问题的评论中,有几个有价值的问题没有回答。一个大问题是,为什么需要ShowDialog
调用是异步的?这似乎是一个缺陷,也是迄今为止您描述的两个症状的根源。谢谢Nathan,我需要它,因为主应用程序需要继续运行,并且在后台,应该显示另一个对话框,并使用实时信息激活,而后台对话框仍然处于活动状态,并且没有被阻止/冻结。
this.BeginInvoke((Action)delegate ()
{
TextBox txtRun = new TextBox();
txtRun.Name = "txtDynamic";
txtRun.Location = new System.Drawing.Point(20, 18 + (20 * 2));
txtRun.Size = new System.Drawing.Size(200, 25);
f2.Controls.Add(txtRun);
});