Je suis en train de développer un programme qui vérifie si l'application Windows Form est connectée à Internet ou non.COMException s'est produite dans IConnectionPoint Unadvise()
mon code, je basé à partir du lien suivant:
https://www.codeproject.com/Articles/34650/How-to-use-the-Windows-NLM-API-to-get-notified-of
Je reçois ce System.Runtime.InteropServices.COMException dans la Unadvise() méthode de classe IConnectionPoint et Je ne suis pas sûr de savoir pourquoi.
Voici les informations supplémentaires de l'exception:
Il n'y a pas de connexion pour cet ID de connexion (Exception de HRESULT: 0x80040004 (OLE_E_NOCONNECTION))
Voici la méthode où Advise() est appelé:
private INetworkListManager nlm;
private IConnectionPoint icp;
private int cookie = 0;
public void AdviseNetworkListManager()
{
try
{
IConnectionPointContainer icpc = (IConnectionPointContainer)nlm;
Guid guid = typeof(INetworkListManagerEvents).GUID;
icpc.FindConnectionPoint(ref guid, out icp);
icp.Advise(this, out cookie);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
h avant est la méthode où Unadvise() est appelé:
public void UnadviseNetworkListManager()
{
icp.Unadvise(cookie);
}
Et voici le constructeur et l'événement qui appelle les deux méthodes ci-dessus:
private NetworkHelper netHelper;
public SQLiteForm()
{
InitializeComponent();
SQLiteDatabase.ConnectDB();
DBHelper.ConnectDB();
netHelper = new NetworkHelper();
netHelper.AdviseNetworkListManager();
netHelper.DoBackgroundWork += backgroundWorker_DoWork;
}
private void SQLiteForm_FormClosing(object sender, FormClosingEventArgs e)
{
netHelper.UnadviseNetworkListManager();
DBHelper.DisconnectDB();
SQLiteDatabase.DisconnectDB();
Application.Exit();
}
Est-ce que quelqu'un sait à pourquoi je suis obtenir cette exception?
Détritus Codeproject.com typique sans la clause de non-responsabilité "ne fonctionne que sur ma machine"., Faites-le de la bonne façon, utilisez + = pour vous abonner aux événements. Donc nlm.NetworkConnectivityChanged + = YourMethod; –
Il ne semble pas y avoir de délégué ** NetworkConnectivityChanged ** pour la classe ** INetworkListManager **. Ce que j'ai fait a été d'implémenter le ** INetworkListManagerEvents ** dans la classe contenant Advise() et Unadvise() et implémenté le ** ConnectivityChanged() ** dans la classe. Cela causera-t-il un problème? –