私はC++アプリケーション(特定のハードウェアコンポーネント用のSDKの関数を呼び出す)を持っており、そのデータをC#GUIに表示したいとします。 C#の部分は、C++が呼び出すDLLです。 (これは顧客からの要請であり、私はそれについて多くの選択肢がありません)。C++ DLLのGUIを更新するC++コード
私はC#に精通していないので、明白なものがないかもしれませんが、 GUIを更新して更新します。別のスレッドで、次に
// Initialize COM.
CoInitialize(NULL);
ptr = new IPtr(__uuidof(ManagedClass));
(*ptr)->ShowForm();
:我々は、C#の側
if (updating) (*ptr)->Update(data)
私は(ptr
がクラス変数である)概ね、このようなコードを、this methodを使用してC#コードにアクセスします:
FormClass myForm;
void ShowForm()
{
myForm = new FormClass();
Application.Run(myForm);
}
void Update(Data data)
{
myForm.Update(data)
}
私はApplication.RunまたはShowDialogを使ってどのように私のGUI、フォームがうまく表示されますが、アップデートによってアプリケーションがクラッシュします。ショーを使用すると、GUIが固まってしまいます。 BeginInvokeを使用すると、GUIが表示されなくなりました。
この設定では、GUIを起動する方法はありますか? myFormのメソッドを直接呼び出すのではなく、何らかの理由でUpdateでInvoke/BackgroundWorkerを使用するのに役立つでしょうか?