У меня есть небольшое, простое приложение C#, которое обновляет значок в системном трее. Я использую его для графического отображения использования ЦП. Приложение отлично работает. Я держу Window скрытым и не показываю его на панели задач, чтобы он не мешал.Приложение Systray Выход
Моя проблема в том, что она будет работать отлично на некоторое время. Часто несколько часов. Но тогда он загадочно уйдет. Нет предупреждений. Ничего. Значок только что исчез, и программа больше не работает. Я тестировал программу в отладчике в разных условиях, поэтому я не думаю, что это так. Есть ли что-то очевидное, что мне не хватает? Если программа встречает ошибку и завершает работу, я должен ожидать сообщения, если форма скрыта? Есть ли какое-нибудь сообщение «keep-alive» или что-то, что мне нужно обработать?
Вот соответствующий раздел кода:
public Form1()
{
InitializeComponent();
trayIcon = new NotifyIcon();
trayIcon.Text = "CPU Utilization";
trayIcon.Icon = new Icon(SystemIcons.Application, 40, 40);
trayIcon.Visible = true;
update = new Thread(new ThreadStart(UpdateCPU));
update.Start();
}
protected override void OnLoad(EventArgs e)
{
Visible = false;
ShowInTaskbar = false;
base.OnLoad(e);
}
private void UpdateCPU()
{
Bitmap bm = new Bitmap(32, 32);
Graphics g = Graphics.FromImage(bm);
while (true)
{
g.FillRectangle(new SolidBrush(c3), 17, 17, 15, 15);
trayIcon.Icon = System.Drawing.Icon.FromHandle(bm.GetHicon());
Thread.Sleep(1000);
}
}
Любая помощь будет принята с благодарностью!
Проверьте системный инструмент просмотра событий и найдите журнал ошибок для своего приложения. Возможно, есть отчет о сбоях или предупреждение. Во-вторых, проверьте диспетчер задач и посмотрите, выделяет ли ваш процессор слишком много памяти. Я понимаю, что есть GC и прочее, но вызов Icon.FromHandle() выглядит подозрительным. –
Не быть саркастичным, но вы уверены, что оно завершено, а не просто скрыто функциональностью значков системы sysray от Microsoft. – adelphus
Система не была полностью не в памяти, если это то, что вы имели в виду. Он использовал только 1 ГБ/8 ГБ. Однако я применил предложение Шона исправить проблему FromHandle(). – user1376232