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是一个“困难”的产业。它需要重新创建本机窗口,如果在错误的时间发生,可能会产生令人不快的副作用。你根本不需要它,如果你隐藏()窗口,任务栏按钮就已经被移除了。