我正在编写一个位于托盘图标中的应用程序,没有任何形式。
我已经实现了自定义ApplicationContext。此自定义ApplicationContext创建托盘图标并添加上下文菜单。如果我打开该上下文菜单并选择“退出”,则应用程序将按预期关闭。我还有一个包含应用程序将使用的功能的类。
代码如下:
public class MyClassApplicationContext : ApplicationContext
{
public Container container;
public NotifyIcon trayIcon;
public ContextMenuStrip contextMenu;
public MyClassApplicationContext()
{
InitializeContext();
}
private void InitializeContext()
{
container = new Container();
contextMenu = new ContextMenuStrip(container);
contextMenu.Items.Add("Salir");
contextMenu.Items[0].Click += MenuExit_Click;
trayIcon = new NotifyIcon(container);
trayIcon.Icon = Resources.IconTray;
trayIcon.ContextMenuStrip = contextMenu;
trayIcon.Visible = true;
}
private void MenuExit_Click(object sender, EventArgs e)
{
ExitThread();
}
protected override void ExitThreadCore()
{
trayIcon.Visible = false;
base.ExitThreadCore();
}
protected override void Dispose(bool disposing)
{
if (disposing && container!= null)
{
container.Dispose();
}
base.Dispose(disposing);
}
}
public class MyClass
{
public string fileName;
public bool CheckConditions()
{
if (Environment.GetCommandLineArgs().Count() < 2)
{
MessageBox.Show("No file specified.");
return false;
}
fileName = Environment.GetCommandLineArgs().ElementAt(1).ToString();
if (!File.Exists(fileName))
{
MessageBox.Show("File specified does not exist.");
return false;
}
return true;
}
}
问题是,如果我在MyClassApplicationContext构造函数中添加以下内容:
MyClass main = new MyClass();
if (!main.CheckConditions())
{
ExitThread();
}
应用程序处理托盘图标,但保持打开状态。
任何指示正确的方向来解决这个问题都将非常感激。
答案 0 :(得分:2)
我会在启动应用程序之前检查条件
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MyClass main = new MyClass();
if (main.CheckConditions()) {
MyClassApplicationContext context = new MyClassApplicationContext();
Application.Run(context);
}
}
}
如果条件检查是上下文的公共成员,则可能更容易使用。
var context = new MyClassApplicationContext();
if (context.CheckConditions()) {
Application.Run(context);
}
这个CheckConditions
方法当然可以是一个包装器,它反过来调用MyClass
的相应方法。