Tôi có một ứng dụng .Net 3.5 C# Winforms. Nó không có GUI như vậy, chỉ là một NotifyIcon với một ContextMenu.Vấn đề với NotifyIcon không biến mất trên Winforms App
Tôi đã cố gắng để thiết lập các NotifyIcon để có thể nhìn thấy = false và vứt bỏ nó trong trường hợp Application_Exit, như sau:
if (notifyIcon != null)
{
notifyIcon.Visible = false;
notifyIcon.Dispose();
}
Ứng dụng được vào mã bên trong dấu ngoặc, nhưng ném một ref rỗng ngoại lệ khi nó cố gắng đặt Visible = false.
Tôi đã đọc ở một vài nơi để đặt nó trong sự kiện đóng biểu mẫu, nhưng mã đó không bao giờ bị trúng (có thể vì tôi không có biểu mẫu hiển thị như vậy?).
Tôi có thể đặt mã này ở đâu để nó thực sự hoạt động? Nếu tôi không đặt nó vào, tôi nhận được biểu tượng kéo dài khó chịu trong khay cho đến khi bạn di chuyển chuột qua nó.
Chúc mừng.
EDIT
Chỉ cần một cái gì đó thêm tôi đã nhận thấy ...........
Tôi đang sử dụng ClickOnce trong ứng dụng ....... ..if Tôi chỉ cần thoát khỏi ứng dụng thông qua ContextMenu trên NotifyIcon, không có ngoại lệ nào được ghi lại.
Chỉ khi sự kiện Application_Exit là bắn sau khi Application đã kiểm tra một bản nâng cấp ở đây ..
private void CheckForUpdate()
{
EventLogger.Instance.LogEvent("Checking for Update");
if (ApplicationDeployment.IsNetworkDeployed && ApplicationDeployment.CurrentDeployment.CheckForUpdate())
{
EventLogger.Instance.LogEvent("Update available - updating");
ApplicationDeployment.CurrentDeployment.Update();
Application.Restart();
}
}
Liệu sự giúp đỡ này?
Trên thực tế, bây giờ mà tôi nghĩ về nó, tôi khuyên bạn nên chống lại sử dụng sự kiện này cho điều này bởi vì nó có thể có một vài Application.Run() loops đi trên các chủ đề khác nhau và tất cả chúng sẽ kích hoạt sự kiện Thoát có thể khiến biểu tượng của bạn biến mất sớm. –
Hoàn toàn đồng ý với bạn! Tôi không muốn sử dụng sự kiện này trong các ứng dụng của tôi cho bất kỳ mục đích dọn sạch nào. Tuy nhiên, nó là câu trả lời đơn giản nhất cho câu hỏi "tại sao mã này ném một ngoại lệ". Theo ý tưởng của tôi làm thế nào để thiết kế mã này theo một cách khác, tôi có thể đề xuất để tạo ra một lớp bao bọc dùng một lần xung quanh notifyIcon, do đó, nó sẽ kiểm soát toàn bộ thời gian của notificationIcon. và sau đó viết bằng cách sử dụng (mới NotifyIconController()) {Application.Run()}; hoặc một cái gì đó như thế này –