Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#窗体在运行时添加控件_C#_Forms_Asynchronous - Fatal编程技术网

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);    

});