如何在整个Windows应用程序中保存对象实例 [英] How to hold the object instance in entire windows application

查看:109
本文介绍了如何在整个Windows应用程序中保存对象实例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的朋友,

在这里我面临着带有通知图标的典型问题.这里我已经开发了一个Windows应用程序,它是Modem Device Detector.Applicaion的主题是当我将任何Modem放入我的CPU时.删除调制解调器,调制解调器断开连接的消息将通过通知"图标显示.到目前为止,这很好.但是当我断开调制解调器的连接时,已连接的通知"图标仍处于活动状态.因此,我不知道如何删除通知"图标的实例. >
示例代码:这是当调制解调器连接事件

 NotifyIcon notifyIcon2 =  NotifyIcon();
notifyIcon2.Icon = SystemIcons.Exclamation;
notifyIcon2.BalloonTipTitle = " ;
notifyIcon2.BalloonTipText = " ;
notifyIcon2.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon2.Icon = 图标(" );
                          
notifyIcon2.Visible =  true ;
notifyIcon2.ShowBalloonTip( 1 );
notifyIcon2.Text = "  + e.Drive; 



这是调制解调器断开连接事件

 NotifyIcon notifyIcon3 =  NotifyIcon();
notifyIcon3.Icon = SystemIcons.Exclamation;
notifyIcon3.BalloonTipTitle = " ;
notifyIcon3.BalloonTipText = " ;
notifyIcon3.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon3.Icon = 图标(" );
notifyIcon3.Visible =  true ;
notifyIcon3.ShowBalloonTip( 1 );
notifyIcon3.Text = "  + e.Drive;
scrTemp.Stop();
scrTemp.Refresh();
notifyIcon3.Dispose();
notifyicon2.Dispose(); 


即使notifyicon处于活动状态,我仍然使用了Dispose Concept.


请分享与此有关的任何信息.


问候,

AnilKumar.D

解决方案

我认为在处置它之前,您可以尝试将可见性设置为false.如果您可以将鼠标光标移到该图标上,然后它会消失,这是您需要执行的操作.我从未尝试在程序保持运行时处理通知图标,因此不确定其反应如何.

实际上,您应该能够重用单个通知图标,而无需持续进行处理和初始化.我确定您只需更改图标,文本并在需要更改模式时重新配置气球提示.我很肯定这是我过去做过的类似事情的结果,以显示连接扫描仪/断开扫描仪的时间.



刚刚从我提到的扫描仪通知图标中找到我的样品,以为我愿意分享我的示例.

 选择 案例 EventID
  案例 WIA_DEVICE_EVENTID.WIA_CONNECT

     .NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
     .NotifyIcon1.BalloonTipText = " " 
     .NotifyIcon1.ShowBalloonTip( 2000 )
     .NotifyIcon1.Icon = 新建 Icon(... GetManifestResourceStream(  Active.ico"), 16 )

  案例 WIA_DEVICE_EVENTID.WIA_DISCONNECT
     .NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
     .NotifyIcon1.BalloonTipText = " " & vbCrLf& ScannerDetails.GetScannerName(DeviceID.Split(" )( 1 ))
     .NotifyIcon1.ShowBalloonTip( 2000 )

    如果 devsConnected = "  然后
       .NotifyIcon1.Icon = 新建 Icon(... GetManifestResourceStream(  InActive.ico"), 16 )
    其他
       .NotifyIcon1.Icon = 新建 Icon(... GetManifestResourceStream(  Active.ico"), 16 )
    结束 如果

结束 选择 


这实际上是已知的问题.互联网上有很多建议.
正如您已经提到的,Disposing.
NotifyIcon s Visible Property设置为false.
Icon Property设置为null.

这里的一些东西可能也有帮助.
在关闭表单后,NotifyIcon仍然可见 [ ^ ]
如何保证NotifyIcon消失了? [使用NotifyIcon的问题不会在Winforms App上消失 [ ^ ]
NotifyIcon不会消失 [NotifyIcon notifyIcon2 = new NotifyIcon(); notifyIcon2.Icon = SystemIcons.Exclamation; notifyIcon2.BalloonTipTitle = "SmsService Running..."; notifyIcon2.BalloonTipText = "Gsm Modem connected Successfully"; notifyIcon2.BalloonTipIcon = ToolTipIcon.Info; notifyIcon2.Icon = new Icon("Running.ico"); notifyIcon2.Visible = true; notifyIcon2.ShowBalloonTip(1); notifyIcon2.Text = "Modem Connected" + e.Drive;



This is When Modem Disconnected event

NotifyIcon notifyIcon3 = new NotifyIcon();
notifyIcon3.Icon = SystemIcons.Exclamation;
notifyIcon3.BalloonTipTitle = "SmsService Stopped..";
notifyIcon3.BalloonTipText = "Gsm Modem Disconnected Successfully";
notifyIcon3.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon3.Icon = new Icon("Stopped.ico");
notifyIcon3.Visible = true;
notifyIcon3.ShowBalloonTip(1);
notifyIcon3.Text = "Modem DisConnected" + e.Drive;
scrTemp.Stop();
scrTemp.Refresh();
notifyIcon3.Dispose();
notifyicon2.Dispose();


Even the notifyicon is in ACTIVE Still i have used Dispose Concept.


please share any information Regarding this.


Regards,

AnilKumar.D

解决方案

I think before you dispose of it you might try setting visibility to false. If you can move the mouse cursor over the icon and then it disappears that is what you will need to do. I have never tried disposing of a notify icon while program stays running so not sure how it reacts.

You actually should be able to re-use a single notify icon without continually disposing and initializing. I am sure you can just change the icon, text, and reconfigure the balloon tip when you need to change modes. I am positive that is how I have done something similar in past to show when scanner was connected/disconnected.

Edit:

Just found my sample from the scanner notify icon I mentioned so thought I''d share my example.

Select Case EventID
  Case WIA_DEVICE_EVENTID.WIA_CONNECT

    Me.NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
    Me.NotifyIcon1.BalloonTipText = "Connected: " & vbCrLf & devsConnected & vbCrLf & "Disconnected:"
    Me.NotifyIcon1.ShowBalloonTip(2000)
    Me.NotifyIcon1.Icon = New Icon(...GetManifestResourceStream("Active.ico"), 16, 16)

  Case WIA_DEVICE_EVENTID.WIA_DISCONNECT
    Me.NotifyIcon1.BalloonTipIcon = ToolTipIcon.Info
    Me.NotifyIcon1.BalloonTipText = "Connected: " & vbCrLf & devsConnected & vbCrLf & "Disconnected:" & vbCrLf & ScannerDetails.GetScannerName(DeviceID.Split("\")(1))
    Me.NotifyIcon1.ShowBalloonTip(2000)

    If devsConnected = "" Then
      Me.NotifyIcon1.Icon = New Icon(...GetManifestResourceStream("InActive.ico"), 16, 16)
    Else
      Me.NotifyIcon1.Icon = New Icon(...GetManifestResourceStream("Active.ico"), 16, 16)
    End If

End Select


This is actually a known problem. There are lots of suggestions on the internet.
Disposing it, as you already mention.
Setting the NotifyIcons Visible Property to false.
Setting the Icon Property to null.

Here''s some stuff that may help too.
NotifyIcon still visible after closing form[^]
How to guarantee a NotifyIcon disappears?[^]
Issue with NotifyIcon not disappreading on Winforms App[^]
NotifyIcon will not disappear[^]

It may not be pretty. After all, it''s a Component, it should do this stuff by default!... It doesn''t though, and we''ll have to live with it.


这篇关于如何在整个Windows应用程序中保存对象实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆