サードパーティのライブラリを使用して、サードパーティの入力デバイスからWindowsフォームにデータを通信しています。私が探しているのは、デバイスから入力データを収集して処理し、特定の条件が与えられた場合に、何が起こっているかをWindowsUIスレッドに報告することです。サードパーティのDLLのソースコードにアクセスできませんが、メインメソッドがバックグラウンドプロセスにあり、作成しなかったために結果をメインUIスレッドに返すことができないことを知っていますか?
Windowsフォーム:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// create instance of my listener
MyListener listener = new MyListener(this);
Controller controller = new Controller(listener);
}
}
サードパーティクラスのリスナーを拡張するMyListenerクラス:
public class MyListener : Listener
{
public Form1 form;
private Frame frame;
// overloaded constructor
public LeapListener(Form1 f)
{
form = f;
}
/// <summary>
/// onFrame is the main method that runs every milisecond to gather relevant information
/// </summary>
public override void onFrame(Controller controller)
{
// Get the most recent frame and report some basic information
frame = controller.frame();
}
}
問題は、MyListenerクラス内のどこからでもメインUIスレッドに通信できることですが、onFrameメソッドはバックグラウンドスレッドで実行されているため、通信できません。とにかく、私が作成しなかったバックグラウンドスレッドからメインスレッドを取得する方法はありますか?
ReportProgressを試し、MyListenerでイベントを作成しようとしましたが、onFrameからメインUIスレッドと通信しようとすると、アプリケーションがクラッシュし、無効なメモリロケーションエラーが発生します。
どんな助けでも大歓迎です。