Windowsフォームアプリケーションがインターネットに接続されているかどうかを確認するプログラムを開発しています。IConnectionPointでCOMExceptionが発生しましたUnadvise()
私は、以下のリンクから自分のコードベース:私はクラスでIConnectionPointのUnadvise()方法でこのSystem.Runtime.InteropServices.COMExceptionを取得しています
https://www.codeproject.com/Articles/34650/How-to-use-the-Windows-NLM-API-to-get-notified-of
をし、なぜ私は確信していません。
ここ方法であって
( 0x80040004(OLE_E_NOCONNECTION)HRESULTからの例外)は、この接続IDの接続がない:ここ
は、例外の追加情報でありますAdvise()は、
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); } }
と呼ばれ、
public void UnadviseNetworkListManager() { icp.Unadvise(cookie); }
そしてここでは、上記の方法の両方を呼び出し、コンストラクタとイベントです::
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(); }
は、私は理由として、誰を知っていEREは、Unadvise()が呼ばれる方法であり、この例外が発生していますか?
典型的なCodeproject.comのジャンクは「自分のマシンでのみ動作します」という免責事項はありません。正しい方法で+ =を使用してイベントを購読してください。したがって、nlm.NetworkConnectivityChanged + = YourMethod; –
** INetworkListManager **クラスの** NetworkConnectivityChanged **デリゲートが存在しないようです。私がしたのは、** INetworkListManagerEvents **をAdvise()とUnadvise()を含むクラスに実装し、クラス内で** ConnectivityChanged()**を実装したことです。それは問題を引き起こすでしょうか? –