创建一个空白的窗体也可以
拖放NotifyIcon到窗体中,然后右击属性,在Text取个应用名称,再拖一个ContextMenuStrip到窗体中
创建一个“退出”菜单,双击下生成退出事件,然后在退出事件中编写代码退出应用程序
//退出
private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Invoke(()=> {
if (cancellToken != null)
{
cancellToken.Cancel(true);
task1?.Dispose();
}
//停止接收消息
RocketHelpter.StopConsumer();
});
//退出
Application.Exit();
}
在notifyIcon1属性栏,选择关联右键菜单
Form1.cs代码参考:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsPrint
{
public partial class Form1 : Form
{
public static Task task1 = null;
public static CancellationTokenSource cancellToken = new CancellationTokenSource();
/// <summary>
/// 是否退出了?1=是,0=否
/// </summary>
public static int isExit = 0;
public Form1()
{
InitializeComponent();
this.WindowState = FormWindowState.Minimized;
//隐藏任务栏区图标
this.ShowInTaskbar = false;
不显示
this.Hide();
//图标显示在托盘区
notifyIcon1.Visible = true;
//图标设置
notifyIcon1.Icon = new Icon(AppDomain.CurrentDomain.BaseDirectory + "\\print_pref.ico");
//启动接收
task1 = Task.Run(() =>
{
// 接收RocketMQ打印消息
RocketHelpter.ReviceMsg();
}, cancellToken.Token);
}
//退出
private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
{
isExit = 1;
this.Invoke(()=> {
if (cancellToken != null)
{
cancellToken.Cancel(true);
task1?.Dispose();
}
//停止接收消息
RocketHelpter.StopConsumer();
});
//退出
Application.Exit();
}
}
}