我使用此解决方案创建了不可见的表单:
protected override void SetVisibleCore(bool value)
{
if (!IsHandleCreated)
{
CreateHandle();
value = false;
ShowOnTaskbar = false;
}
base.SetVisibleCore(value);
}
稍后,我通过调用以下代码使表单可见:
myForm.Show();
myForm.ShowOnTaskbar = true;
任务栏图标不会立即显示。当我点击表单使其处于活动状态后,它将显示。
如何显示非活动表单的任务栏图标?
正如其他人在评论中所说,您的问题在您提出时无法重现。这里是一个使用一种表单的简单演示,展示了任务栏图标如何无延迟地显示开/关。您可以尝试一下并告诉我它是否适合您吗?
首先,在表单不可见期间有一个从 5 秒到 0 秒的倒计时。之后,表单显示并开始每秒打开/关闭任务栏图标的可见性。
这是唯一表格的代码:
public partial class Form1 : Form
{
delegate void ShowFormCallback();
delegate void ToggleTaskbarIconVisibilityCallBack();
public Form1()
{
InitializeComponent();
Countdown();
}
protected override void SetVisibleCore(bool value)
{
if (!IsHandleCreated)
{
CreateHandle();
value = false;
ShowInTaskbar = false;
}
base.SetVisibleCore(value);
}
public void Countdown()
{
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
Console.WriteLine("Start countdown...");
for(int i = 5; i> 0; i--)
{
Console.WriteLine($"{i}");
Thread.Sleep(1000);
}
Console.WriteLine("Show Form and Taskbar icon!");
ShowForm();
StartTaskbarIconVisibilityToggle();
}).Start();
}
public void StartTaskbarIconVisibilityToggle()
{
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
Console.WriteLine("Toggling taskbar icon visibility...");
for (int i = 5; i > 0; i--)
{
Console.WriteLine("Toggle On/Off!");
ToggleTaskbarIconVisibility();
Thread.Sleep(1000);
}
Console.WriteLine("End of the demo!");
ToggleTaskbarIconVisibility();
}).Start();
}
private void ShowForm()
{
if (this.InvokeRequired)
{
ShowFormCallback callback = new ShowFormCallback(ShowForm);
this.BeginInvoke(callback, new object[] { });
}
else
{
this.Show();
this.ShowInTaskbar = true;
}
}
private void ToggleTaskbarIconVisibility()
{
if (this.InvokeRequired)
{
ToggleTaskbarIconVisibilityCallBack callback = new ToggleTaskbarIconVisibilityCallBack(ToggleTaskbarIconVisibility);
this.BeginInvoke(callback, new object[] { });
}
else
{
this.ShowInTaskbar = !this.ShowInTaskbar;
}
}
}