2016-06-15 10 views
0

私は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を使用するのに役立つでしょうか?

答えて

2

UIスレッドでC#GUIを更新する必要があります。別のスレッドからGUIスレッドに同期する方法については、この回答を参照してください。

C# Windows Forms Application - Updating GUI from another thread AND class?

また、あなたは、Visual Studioでデバッグするときに現在あるものをスレッドを決定するための便利なデバッグ場所のツールバーを見つけるかもしれない

https://blogs.msdn.microsoft.com/davedev/2012/07/18/where-is-the-suspend-resume-and-terminate-toolbar-in-visual-studio-2012-ultimate/

関連する問題