VisualBasic6.0でマルチスレッドを実装する方法。誰かが例を挙げてくれるといいですね。
5 に答える
VB6は、マルチスレッドアプリケーションにとって本当に良い環境ではありません。すぐに使用できるサポートはありません。標準のWinAPI関数を詳しく調べる必要があります。非常に包括的なサンプルを提供するこの記事をご覧ください。
いくつかのプロジェクトで、複数のプロセスを使用して VB6 で非同期処理を実装しました。基本的に、メイン プロセスとは別のアクティブな exe プロジェクト内にワーカー スレッドがあります。その後、worker exe に必要なデータを渡して開始し、終了またはメイン プロセス用のデータがあることを示すイベントを発生させます。
それはより多くのリソースを消費します (スレッドではなく余分なプロセス) が、VB6 は単一のスレッド化されたアパートメントで実行されており、新しいスレッドを開始するためのサポートが組み込まれていません。
1 つのプロセス内に複数のスレッドが本当に必要な場合は、VB6 ではなく .net または VC6 の使用を検討することをお勧めします。
解決しようとしている問題が長い計算であり、UI の応答性を維持したい場合、1 つの可能性はDoEvents
、長い計算内で関数を頻繁に呼び出すことです。このように、プログラムはすべての Windows メッセージを処理できるため、UI はユーザー コマンドに応答します。キャンセル ボタンを設定して、プロセスを終了する必要があることを知らせることもできます。
これを行う場合は、長いプロセスを開始後にもう一度実行するなど、問題を引き起こす可能性のあるコントロールを無効にするように注意する必要があります。
Interop Forms Toolkit 2.0を使用して、VB6のマルチスレッド化を行うことができます。Toolkitを使用すると、アップグレードを強制されることなく、.NET機能を利用できます。したがって、VB6のActiveXコントロールとして.NETユーザーコントロールを使用することもできます。