C# 为什么将form1.ShowInTaskBar设置为false';有什么例外吗?

C# 为什么将form1.ShowInTaskBar设置为false';有什么例外吗?,c#,.net,winforms,C#,.net,Winforms,我想在某些情况下在托盘图标中启动表单。 所以在构造器中我做了: public Form1() { InitializeComponent(); settingsFileDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath) + settingsFileDirectory; if (!Directory.Exists(settingsFileDirectory)) {

我想在某些情况下在托盘图标中启动表单。 所以在构造器中我做了:

public Form1()
{
    InitializeComponent();

    settingsFileDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath) +
        settingsFileDirectory;
    if (!Directory.Exists(settingsFileDirectory))
    {
        Directory.CreateDirectory(settingsFileDirectory);
    }
    settingsFile = Path.Combine(settingsFileDirectory,settingsFile);
    if (!File.Exists(settingsFile))
    {
        File.Create(settingsFile);
    }

    string[] values = System.IO.File.ReadAllText(settingsFile).Split(',');
    downloadonstart = Convert.ToBoolean(Convert.ToInt32(values[0]));
    loadonstart = Convert.ToBoolean(Convert.ToInt32(values[1]));
    startminimized = Convert.ToBoolean(Convert.ToInt32(values[2]));
    displaynotifications = Convert.ToBoolean(Convert.ToInt32(values[3]));

    lvnf = new ListViewNF();
    lvnf.Location = new Point(250, 18);
    lvnf.Size = new Size(474, 168);
    lvnf.View = View.Details;
    this.SuspendLayout();
    lvnf.LabelEdit = true;
    lvnf.Columns.Add("From", 100, HorizontalAlignment.Left);
    lvnf.Columns.Add("Subject", 200);
    lvnf.Columns.Add("Date", 300);
    lvnf.Sorting = SortOrder.None;
    lvnf.ColumnClick += lvnf_ColumnClick;
    lvnf.Click += lvnf_Click;
    this.Controls.Add(lvnf);
    this.ResumeLayout(false);
    label8.Visible = false;
    pbt.Size = new Size(216, 10);
    pbt.Location = new Point(8, 330);
    pbt1.Size = new Size(396, 10);
    pbt1.Location = new Point(250, 198);
    this.Controls.Add(pbt1);
    groupBox1.Controls.Add(pbt);
    pbt.Text = "0%";
    pbt1.Text = "0%";
    //LoadFullMessages();
    if (startminimized == true)
    {
        this.WindowState = FormWindowState.Minimized;
    }
    if (loadonstart == true)
    {
        backgroundWorker2.RunWorkerAsync();
    }
    if (downloadonstart == true)
    {
        backgroundWorker1.RunWorkerAsync();
    }
}
然后在
Form1\u Resize
事件中,我执行了以下操作:

private void Form1_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        this.Hide();
        this.ShowInTaskbar = false;
    }
}
例外情况是这样的:

this.ShowInTaskbar = false;
System.Windows.Forms.dll中发生类型为“System.StackOverflowException”的未处理异常

然后我点击break,我看到:


我做错了什么?

我猜调用
this.ShowInTaskbar=false的副作用导致窗体调整大小。因此递归。将最小化设置移动到form1加载事件解决了它。将此部分移动到加载事件:if(startminimized==true){this.WindowState=FormWindowState.Minimized;}这似乎是一个很好的解决方案。请阅读文章中有关提供高质量样本的指导。文章中99%的代码与问题无关。另外,请确保将异常信息以文本形式发布,而不是以图像形式发布。该代码段不足以提供复制。但没错,ShowInTaskbar是一个“困难”的产业。它需要重新创建本机窗口,如果在错误的时间发生,可能会产生令人不快的副作用。你根本不需要它,如果你隐藏()窗口,任务栏按钮就已经被移除了。