Can';当新表单出现时,t单击其他表单C#

Can';当新表单出现时,t单击其他表单C#,c#,winforms,forms,C#,Winforms,Forms,我正在制作一个ATM模拟器,目前我正试图在一个表单上有一个按钮来创建另一个表单(ATM)。我已经能够做到这一点,但只有一个表单,因为当新表单出现时,我无法点击另一个有“添加atm”按钮的表单。我已经尝试过使用C运行Form.Show、Form.ShowDialog和Applications.Run() 代码如下: public class Program { private Account[] ac = new Account[3]; private AT

我正在制作一个ATM模拟器,目前我正试图在一个表单上有一个按钮来创建另一个表单(ATM)。我已经能够做到这一点,但只有一个表单,因为当新表单出现时,我无法点击另一个有“添加atm”按钮的表单。我已经尝试过使用C运行
Form.Show
Form.ShowDialog
Applications.Run()

代码如下:

public class Program
    {
        private Account[] ac = new Account[3];
        private ATM atm;
        public Form1 form1;

         /* This function initilises the 3 accounts 
         * and instanciates the ATM class passing a referance to the account information

         */
        public Program()
        {

            ac[0] = new Account(300, 1111, 111111);
            ac[1] = new Account(750, 2222, 222222);
            ac[2] = new Account(3000, 3333, 333333);

            Thread form1thread = new Thread(new ThreadStart(startform)); //Creates ATM Form
            //Thread atm2 = new Thread(new ThreadStart(start));

            form1thread.Start();
            //atm2.Start();
        }


        static void Main(string[] args)
        {
            new Program();
        }

        public void startform()
        {
            form1 = new Form1(this);
            form1.ShowDialog();
        }

        public void newatm()
        {
            atm = new ATM(ac);
            atm.ShowDialog();
        }

        public void makethread()
        {
            Thread newatm = new Thread(new ThreadStart(startform));
            newatm.Start();
        }
    }
表格1:

public partial class Form1 : Form
{
    Program program;

    public Form1(Program program)
    {
        InitializeComponent();
        this.program = program;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.ShowDialog();
    }
    private void button1_Click(object sender, EventArgs e)
    {

        program.newatm();
    }
}

如果不希望表单成为模式对话框,请使用表单的
Show
方法,而不是
ShowDialog
方法


您还需要确保从UI线程而不是后台线程创建和显示表单。基于您的代码,您根本不需要创建后台线程,只需直接从构造函数创建/显示表单。

如果您不希望表单成为模式对话框,请使用表单的
show
方法而不是
ShowDialog
方法


您还需要确保从UI线程而不是后台线程创建和显示表单。基于您的代码,您根本不需要创建后台线程,只需直接从构造函数创建/显示表单。

可能是因为您正在代码中的某个地方执行ShowModal。。您是否可以显示您正在使用的代码,以便我们可以限制所有猜测工作..?您是否使用Windows窗体或WPF?可能是因为您正在代码中的某个位置执行ShowModal。。您能否显示您正在使用的代码,以便我们可以限制所有猜测工作..?您使用的是Windows窗体还是WPF?如果我使用show,则会出现一个错误,告诉我使用ShowDialog,因为我正在使用threads@SnazzyWolf然后不要从后台线程创建/显示表单。从UI线程创建并显示表单。应通过UI线程创建/访问所有控件。如果需要先在后台线程中执行其他工作,则使用
BackgroundWorker
控件封送回UI线程。BeginInvoke
以显示新表单。根据您编辑的代码,不需要执行任何操作,只是首先不要启动新线程。我需要使用线程,这是task@SnazzyWolf如果你的任务是使用线程,那么你应该适当地使用它们。这不是对
线程
类的适当使用。您应该创建一个新线程来执行长时间运行的非UI工作。如果您需要一个在线程中执行工作的示例,请拿出一个与UI无关的任务来执行。如果我使用Show,则会出现一个错误,告诉我使用ShowDialog,因为我正在使用threads@SnazzyWolf然后不要从后台线程创建/显示表单。从UI线程创建并显示表单。应通过UI线程创建/访问所有控件。如果需要先在后台线程中执行其他工作,则使用
BackgroundWorker
控件封送回UI线程。BeginInvoke
以显示新表单。根据您编辑的代码,不需要执行任何操作,只是首先不要启动新线程。我需要使用线程,这是task@SnazzyWolf如果你的任务是使用线程,那么你应该适当地使用它们。这不是对
线程
类的适当使用。您应该创建一个新线程来执行长时间运行的非UI工作。如果您需要一个在线程中执行工作的示例,请提出一个与UI无关的任务来执行。