Visual Studio 程序在IDE中运行良好,但不能作为.exe工作

p8ekf7hl  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(194)

我写了一个程序,开始最小化到系统托盘。双击图标,弹出一个需要密码的登录表单,如果密码正确,另一个表单将打开,登录表单将关闭。
使用regular:

Settings f = new Settings();
f.Show();
this.Dispose();
Application.Exit();

字符串
我尝试的变化导致了很多bug。有时应用程序会关闭,有时系统托盘中会有两个iconNotify和两个应用程序示例,等等。
因此,我求助于:

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    ThreadPool.QueueUserWorkItem((state) => {
        new System.Threading.Thread(() => {
            new Password().ShowDialog();
        }).Start();
    });
}


这是在设置表单中,它在ThreadPool上启动密码表单(因此可以重用)。
我不知道为什么,但每次密码线程是处置本身(自动发生时,正确的密码已输入)-设置'形式激活FormClosing function.因此,我诉诸:

private void Settings_FormClosing(object sender, FormClosingEventArgs e)
{
    try
    {
        e.Cancel = true;
        this.Hide();
        this.WindowState = FormWindowState.Minimized;
    }
    catch (Exception ex)
    {
        this.Invoke(new Action(() => { 
            this.WindowState = FormWindowState.Normal;
            this.Show();
        }));
    }
}


下面是它在Password表单视图中的外观:

private void btn_access_Click(object sender, EventArgs e)
{
    if (tb_password.Text == Regex.Replace(GithubAPI.ReadGithubFile("master", "Password"), @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd())
    {
        //Settings form = new Settings();
        //form.WindowState = FormWindowState.Normal;
        //form.Show();

        this.Dispose();
        Application.Exit();
    }
    else
    {
        MessageBox.Show("Wrong password, try again!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}


在Visual-Studio中运行时,注解掉的三行没有什么区别,尽管作为.exe运行时,它会在一瞬间显示Settings的表单,然后消失。
这段代码现在运行得很好,在Visual-Studio 2022中也是如此。但是,每当我试图将它作为一个独立的应用程序运行时,它就会出错。
想法将不胜感激!

tzxcd3kk

tzxcd3kk1#

不知道是什么原因导致它不能作为.exe工作,所以我最终采取了不同的方法。
以前Application.Exit();应该触发private void Settings_FormClosing(object sender, FormClosingEventArgs e),其中包含激活表单的代码。密码表单中的this.Dispose();是为了摆脱显示多个表单打开。
这就是代码的结尾:

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    Password form = new Password();
    if(form.ShowDialog() == DialogResult.OK)
    {
        this.WindowState = FormWindowState.Normal;
        this.Show();
    }
}

private void Settings_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    this.Hide();
    this.WindowState = FormWindowState.Minimized;
}

字符串
在密码表单中:

private void btn_access_Click(object sender, EventArgs e)
{
    if (tb_password.Text == Regex.Replace(GithubAPI.ReadGithubFile("master", "Password"), @"^\s*$\n|\r", string.Empty, RegexOptions.Multiline).TrimEnd())
        DialogResult = DialogResult.OK;
    else
        MessageBox.Show("Wrong password, try again!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


感谢所有花时间阅读的人,即使你没有提出解决方案。希望这对其他人有用:)

相关问题