【发布时间】:2013-12-11 16:42:01
【问题描述】:
我在线程中有一个 notifyIcon,该图标有一个带有“关闭”选项的 contextMenu,但我无法从那里关闭控制台...
使用此代码只会关闭 notifyIcon,而不是控制台:
public void mnuExit_Click(object sender, EventArgs e)
{
notificationIcon.Dispose();
notifyThread.Abort();
timerThread.Abort();
Application.Exit();
}
我试过了,但是控制台里面没有“Invoke”。
this.Invoke((Action)delegate
{
Application.Exit();
});
编辑
我正在使用一个线程在 systemTray 中创建一个 notifyIcon,因为这是唯一的方法,没有别的办法。 notifyIcon 有一个名为“Exit”的选项。 Exit事件方法只关闭notifyIcon,但我也想关闭Console窗口。
即使我只是让Application.Exit(); 在mnuExit_Click 中,也只有 notifyIcon 会关闭。
我的 program.cs 有这行代码来保持控制台打开:
System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
也许这就是问题所在……不确定。 (但我需要这个)
【问题讨论】:
-
您是否在应用内创建任何表单?
-
如何打开控制台/表单? (Application.Exit 会按照它说的做,所以当应用程序退出时,应用程序的系统托盘图标自然会消失。你真正想要的是只关闭表单/控制台,而不是整个应用程序 - 所以你应该保留一些对象引用您的控制台/表单能够在不退出您的应用程序的情况下关闭它。)
-
Application.Exit() 只能做一些事情来让线程退出,它不会关闭控制台窗口。 Environment.Exit() 是更大的锤子。
-
它只是一个带有 notifyIcon 和 contextMenu 的控制台窗口。上下文菜单项“退出”应该关闭所有内容。
-
@HansPassant 我尝试使用
Environment.Exit(0);,但同样的情况发生了,只是图标消失了,但控制台仍然打开。
标签: c# multithreading .net-4.0 console-application