main ist ja nur der Einstiegspunkt ins Programm.
Die Programm-Logik wird normalerweise in Klassen ausgelagert. In der main findet dann die Instanziierung und deren Aufruf statt.
etwa so:
namespace KalenderwocheImSystemTray
{
internal class MyTray : IDisposable
{
private readonly Bitmap _bitmap = new Bitmap(16, 16);
private readonly Graphics _graphics;
private readonly NotifyIcon _ni = new NotifyIcon();
private readonly System.Windows.Forms.Timer _timer;
private bool _disposed;
/// <param name="updateInterval">in milliseconds</param>
public MyTray(int timerInterval)
{
//Timer erzeugen
// ...
//Contextmenu erzeugen [0]=Exit
// ...
//Notifyicon
// ...
}
public void Dispose()
{
if (_disposed) return;
_timer.Tick -= ReFreshIcon;
_bitmap?.Dispose();
_graphics?.Dispose();
_ni?.Dispose();
_timer?.Dispose();
_disposed = true;
}
private void ReFreshIcon(object sender, EventArgs e)
{
// zu Testzwecken wird nicht die KW, sondern ablaufende Sekunden anhand vom Interval gezeichnet
_graphics.Clear(Color.Transparent);
_graphics.DrawString(DateTime.Now.AddSeconds(2).Second.ToString(), new Font("Arial", 10.0f), Brushes.White, 0, 0);
_ni.Icon = Icon.FromHandle(_bitmap.GetHicon());
}
private void ContextMenuItemClose(object sender, EventArgs e)
{
Application.Exit();
}
}
class Program
{
public static void Main()
{
MyTray myTrayIcon = new MyTray(2000);
Application.Run(); // runs application loop
myTrayIcon.Dispose();
}
}
}
|