Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >c#控制台应用程序的系统托盘图标不显示菜单

c#控制台应用程序的系统托盘图标不显示菜单
EN

Stack Overflow用户
提问于 2012-10-10 10:43:03
回答 4查看 21.1K关注 0票数 9

我有一个小的C# (.NET 4.0)控制台应用程序,我希望用户在右键单击系统托盘图标时能够通过显示菜单来进行交互。我可以将图标添加到托盘,没有任何问题,但我就是无法显示菜单。我使用了以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NotifyIcon trayIcon = new NotifyIcon();
trayIcon.Text = "TestApp";
trayIcon.Icon = new Icon(SystemIcons.Application, 40, 40);

ContextMenu trayMenu = new ContextMenu();

trayMenu.MenuItems.Add("Blah", item1_Click);
trayMenu.MenuItems.Add("Blah2", item1_Click);
trayMenu.MenuItems.Add("Blah3", item1_Click);

trayIcon.ContextMenu = trayMenu;
trayIcon.Visible = true;

..。这会将图标放到托盘中。但是,右键单击该图标不会执行任何操作。我尝试了MenuItems.Add的各种排列,但都不能显示菜单。我确信我错过了一些简单的东西--有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-10 10:47:21

在创建图标后尝试添加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Application.Run()

请注意,此方法不会返回,因此在调用它之后无法执行任何操作。这意味着你将不得不在一个单独的线程中完成所有其他工作。

发生的情况是,操作系统向您的应用程序发送一条消息,告诉它已经右键单击了托盘图标,但是托盘图标代码永远看不到它(因为这些消息是由Application.Run处理的),因此无法通过打开菜单来响应。

票数 18
EN

Stack Overflow用户

发布于 2013-03-28 13:23:04

关于Application.Run(),这是将所有其他代码放在另一个线程中的另一种选择,即在主线程以外的线程上创建NotifyIconmenuevents等。

这应该包括Application.Run(),因为这允许标准应用程序消息循环在current线程上工作。然后,因为事件是在同一线程上创建的,所以可以使用Application.Exit()来关闭通知消息传递,但仍然允许主线程继续。下面是一个控制台应用程序的小示例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Program 
{
    public static ContextMenu menu;
    public static MenuItem mnuExit;
    public static NotifyIcon notificationIcon;

    static void Main(string[] args)
    {
        Thread notifyThread = new Thread(
            delegate()
            {
                menu = new ContextMenu();
                mnuExit = new MenuItem("Exit");
                menu.MenuItems.Add(0, mnuExit);

                notificationIcon = new NotifyIcon()
                {
                    Icon = Properties.Resources.Services,
                    ContextMenu = menu,
                    Text = "Main"
                };
                mnuExit.Click += new EventHandler(mnuExit_Click);

                notificationIcon.Visible = true;
                Application.Run();
            }
        );

        notifyThread.Start();

        Console.ReadLine();          
    }

    static void mnuExit_Click(object sender, EventArgs e)
    {
        notificationIcon.Dispose();
        Application.Exit();
    }

}
票数 9
EN

Stack Overflow用户

发布于 2013-12-05 20:14:07

以下是解决方案:您必须使用Application.Run(),因为控制台模式下的gui事件不起作用。但是你可以使用这个解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var task = System.Threading.Tasks.Task.Factory.StartNew(() => ShowTrayIcon());

void ShowTrayIcon()
{
    some code with tray icon ...
}

这将在新线程中启动您的try图标设置...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12817468

复制
相关文章
C#动态系统托盘图标
C#动态系统托盘图标 利用timer组件定时执行变化。 1 using System; 2 using System.Windows.Forms; 3 4 namespace DynamicStockIcon 5 { 6 public partial class DynamicStockIcon : Form 7 { 8 public DynamicStockIcon() 9 { 10 InitializeCompo
landv
2018/05/24
9640
C#动态系统托盘图标
C#动态系统托盘图标 利用timer组件定时执行变化。 1 using System; 2 using System.Windows.Forms; 3 4 namespace DynamicStockIcon 5 { 6 public partial class DynamicStockIcon : Form 7 { 8 public DynamicStockIcon() 9 { 10 InitializeCompo
landv
2018/06/22
8950
PyQt icon创建,显示 PyQt4 -- 系统托盘图标设置
http://www.cnblogs.com/obbo/articles/2718426.html
bear_fish
2018/09/20
1.9K0
PyQt icon创建,显示  PyQt4 -- 系统托盘图标设置
MFC子窗口任务栏显示图标和主窗口最小化在系统托盘中显示图标
MFC子窗口任务栏显示图标很简单, 只需要在子窗口的初期化函数OnInitDialog()中添加ModifyStyleEx(WS_EX_TOOLWINDOW, WS_EX_APPWINDOW); 主窗口在系统托盘中显示图标以及恢复窗口是参考某位大神的代码 (一)  原理     1、最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标。     2、恢复的原理:将窗口显示,再将托盘中的图片删除。 (二)程序实现     1、自定义消息WM_SHOWTASK:  #define WM_SHOWTASK (WM
Sindsun
2018/04/28
3.2K0
C# 用树形列表 动态 显示菜单
明志德道
2023/10/21
3950
C# 用树形列表 动态 显示菜单
C# 控制台应用程序输出颜色字体[更正版]
首先感谢院子里的“yanxinchen”,之前的方法是通过c#调用系统api实现的,相比之下我的有点画蛇添足了,哈哈。 最佳解决方案的代码: static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Hello, color text!"); Console.ForegroundColor = ConsoleColor.Red; Cons
磊哥
2018/05/09
2K0
C# 控制台应用程序输出颜色字体[更正版]
使用C#创建SQLite控制台应用程序
本文介绍了如何使用C#和SQLite数据库来创建一个简单的登录系统,并给出了具体的代码示例。主要实现了用户登录、注册、修改个人信息和查询个人信息等功能。使用了SQLiteStudio工具来创建数据库,并使用了System.Data.SQLite.dll库进行数据库操作。
CNXY
2017/12/25
2.5K0
使用C#创建SQLite控制台应用程序
【c#】控制台程序的显示和隐藏「建议收藏」
在项目开发的过程中,为了方便调试,利用控制台打印出一些提示信息,当安装到现场的时候,我们担心工作人员手误关掉了程序,所以将控制台隐藏,让程序在后台跑。下面是具体的显示和隐藏的代码:
全栈程序员站长
2022/08/10
4.3K0
Qt之任务栏系统托盘图标
http://blog.csdn.net/qivan/article/details/7506306
bear_fish
2018/09/20
2.9K0
Qt之任务栏系统托盘图标
使用C#创建WCF服务控制台应用程序
本文介绍如何使用C#创建WCF服务控制台应用程序。首先,作者演示了如何将WCF服务添加到现有的Visual Studio 2019项目。然后,他演示了如何编写服务合同,并添加数据契约。最后,他演示了如何将控制台应用程序与WCF服务连接,并调用服务的方法。
CNXY
2017/12/25
2.1K0
使用C#创建WCF服务控制台应用程序
快捷方式图标变白完美解决方法_应用程序图标显示空白
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
1.5K0
Windows图标显示异常解决方法。桌面图标异常,开始菜单图标异常,任务栏图标异常。图标缓存位置。
解决办法: 在C:\Users\Administrator\AppData\Local里有个IconCache.db图标缓存,它是隐身的。一般图标出现异常就是这个缓存的问题了,我们把这个删掉,之后重启后会自动重新生成新的,然后就好了。
小蓝枣
2020/09/23
5.4K0
网课、在线会议等学术交流必备神器之ClickShow
咱在GitHub上闲逛偶遇一款名叫ClickShow的小工具,开发者是cuiliang,采用C#语言开发。看着ReadMe的描述咱就觉得这款工具非常适合当下正流行的各类网课和在线会议,不敢独享,故在此分析给大家。
巴山学长
2023/03/15
1.1K0
网课、在线会议等学术交流必备神器之ClickShow
利用c#制作托盘程序,并禁止多个应用实例运行
托盘程序的制作: 1.把NotifyIcon控件拉一个到窗体上,并设置NotifyIcon的Icon(很重要!否则运行后看不到效果) 2.窗体关闭时,将程序最小化到系统托盘上 private void Form1_FormClosing(object sender, FormClosingEventArgs e) {     //MessageBox.Show("程序将最小化到系统托盘区");     e.Cancel = true; // 取消关闭窗体      this.Hide();
菩提树下的杨过
2018/01/22
1.3K0
设置HEXO博客菜单图标
本文只介绍hexo怎么设置菜单图标,并不说明怎么安装Font Awesome字体(因为一般主题都已经带了),如需了解的请自行百度。
用户9949933
2023/02/24
8720
用C#实现模拟双色球中奖控制台应用程序
简单地运用CSharp语言和.net平台,如变量、方法、类、数组、字典、系统函数、规范的注释、控制台输出、文件的读写、程序怎样设计等。
摘繁华
2022/08/31
1.2K0
用C#实现模拟双色球中奖控制台应用程序
让CodeRush Xpress for C#的菜单在Visual Studio 2008下显示
很多情况下,CodeRush Xpress for c#功能是靠快捷键来操作的。不过,要经常使用它的options菜单,常Shift+Ctrl+Alt+O觉得也很麻烦。
williamwong
2018/07/24
5510
让CodeRush Xpress for C#的菜单在Visual Studio 2008下显示
[Qt]设置窗口图标和EXE应用程序图标
原文链接:https://blog.csdn.net/humanking7/article/details/85233449
祥知道
2020/03/10
10.8K0
用C#实现模拟双色球中奖控制台应用程序
简单地运用CSharp语言和.net平台,如变量、方法、类、数组、字典、系统函数、规范的注释、控制台输出、文件的读写、程序怎样设计等。
摘繁华
2022/05/03
1.4K0
用C#实现模拟双色球中奖控制台应用程序
点击加载更多

相似问题

wxpython系统托盘图标菜单

32

图标下方显示的C#系统托盘上下文菜单

11

pygtk系统托盘图标不工作

21

如何显示C#窗口服务的系统托盘图标。?

21

在控制台应用程序中有一个带有C#菜单的系统托盘

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文