Binarix FL-net Library for Windows

マニュアル>アプリケーション開発ガイド .NET編>プログラミングのヒント

プログラミングのヒント

FLnetクラスには多くのメソッドが用意されていますが、以下の3つのメソッドを使用するだけでコモンメモリによる他ノードとの交信ができます。まずは以下のメソッドを使用して、必要に応じて他のメソッドを使用するようにします。

FLnetクラスのメソッド機能
OpenFL-netネットワークに参加する
Readコモンメモリを読み込む
Writeコモンメモリに書き込む

FL-netネットワークに参加した後、ユーザーアプリケーションを終了するまでFL-netネットワークから離脱する必要がなければ、Closeメソッドを呼び出す必要はありません。FL-net通信.NETクラスライブラリがアンロードされる時に、自動的にクローズ処理が行われます。また、ユーザーアプリケーションが何らかの理由により異常終了した場合でも、FL-net通信エンジンが適切に離脱処理を行います。

イベントハンドラによる状態変更通知を必ず実装する必要はありません。ノード状態を取得するメソッドは、任意のタイミングで呼び出すことができます。ユーザーアプリケーションのタイマーイベントやワーカースレッドで定期的にノード状態を取得することもできます。また、コモンメモリにウォッチドッグタイマーを定義している場合などでは、ノード状態の取得そのものが不要になる場合もあります。

イベントハンドラを使用する場合は、以下の点に注意してください。

注意1

ノード状態変更やメッセージ送受信を通知するイベントハンドラは、FL-net通信ライブラリの内部で生成されるワーカースレッドで実行されます。イベントハンドラの処理結果をコントロールに表示する場合は注意が必要です。一般にWindowsのコントロールはスレッドセーフとは限りません。イベントハンドラ内でコントロールにアクセスすると予期しない結果を引き起こすことがあります。イベントハンドラでの処理結果をコントロールに表示する場合は、BeginInvokeメソッドを使用して、フォームを作成したスレッドでコントロールを参照するようにします。
また、スレッドの切り替えを待機するメソッド(InvokeやEndInvoke)は、デッドロックの原因になる場合があるので注意してください。例えば、イベントハンドラ内でInvokeメソッドを呼び出していて、ウィンドウを作成したスレッドでFLnet.Closeメソッドを呼び出した場合、デッドロック状態になります。これは、FLnet.Closeメソッドがイベントハンドラの終了を待機するからです。イベントハンドラの処理結果をウィンドウに表示する場合は、BeginInvokeメソッドを使用するのが安全です。

注意2

イベントハンドラからは極力短時間で復帰してください。復帰までに時間がかかると、その間に発生した新しいイベントが通知されない場合があります。