0

我正在使我的程序多线程,因为它是 Bukkit (Minecraft) 的服务器管理器,这对于某些系统来说相当繁重。现在我面临一个小问题。当我想打开一个新的子表单时,我不能告诉中心父。它只是不做我告诉表格要做的事情。我已经找到了解决方法,但我不知道是否可以更轻松地完成,或者我是否必须更改其他内容。

这是我的自动取款机代码:
Works

private void ThreadFrmSettings()
{
    Form frmSettings = new frmSettings();
    frmSettings.StartPosition = FormStartPosition.Manual;
    frmSettings.Location = new Point(Location.X + (Width - frmSettings.Width) / 2, Location.Y + (Height - frmSettings.Height) / 2);
    frmSettings.ShowDialog();
}

不工作

var frmSettings = new frmSettings();
frmSettings.ShowDialog();

这种行为正常吗?谢谢!

4

2 回答 2

0

StartPosition = FormStartPosition.CenterScreen; 财产From呢?

IE

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        StartPosition = FormStartPosition.CenterScreen;

        Form frmSettings = new Form();
        frmSettings.Width = 300;
        frmSettings.Height = 200;
        frmSettings.StartPosition = FormStartPosition.CenterScreen;
        //frmSettings.Location = new Point(Location.X + (Width - frmSettings.Width) / 2, Location.Y + (Height - frmSettings.Height) / 2);
        frmSettings.ShowDialog();

    }
}

注意:frmSettings.Show(); 给出不同的结果,在这种情况下,窗口不会位于中心。

这是带有线程/任务的示例

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            StartPosition = FormStartPosition.CenterScreen;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Task.Factory.StartNew(() => {

                Form frmSettings = new Form();
                frmSettings.Width = 300;
                frmSettings.Height = 200;
                frmSettings.StartPosition = FormStartPosition.CenterParent;

                frmSettings.ShowDialog();

            } );   

        }
    }

在此处输入图像描述

于 2013-03-21T18:31:05.013 回答
0

我遵循了 MadScienceDreams 的建议并得到了我想要的结果,这就是成功的代码:

this.Invoke(new MethodInvoker(()=>ThreadFrmSettings())
于 2013-03-21T20:57:35.697 回答