1

私は多くのサードパーティのライブラリとコントロールを備えたレガシーの大規模な vb6 エディターを持っていますが、最近、メインのエディター フォームから独立していくつかの他のフォームを実行できるように、マルチ スレッドにするようにセットアップする必要があります。基本的に、メイン ページからボタンをクリックして他のフォームを実行することを除いて、これらの他のフォームとメイン エディターの間に最小限の通信があります。

そのため、多くのグーグル検索から、現在のアプリをactivex exeとして設定し、global-multi-useに設定されたクラスを追加してこれを可能にすることにより、現在のアプリをマルチスレッドに変換する方法を見つけました。現在、デバッグ モードで編集とテストを行っているときに、終了時に多くの奇妙なクラッシュが発生することがあることがわかりました。

'main.frm - button click call
'On the button click, create a new object
Set obj = CreateObject("MyApp.clsThread")
Call obj.NewThread

'clsThread
' Create a new form and load it to run on a new thread
Public Sub NewThread()
    Dim frm As Object
    Set frm = New frmDogbert
    Load frmDogbert
    frm.show
    Set frm = Nothing
End Sub

アプリがより不安定になっているように見えるのではないかと心配しているので、これを行うときに絶対に知っておくべきこと、つまり潜在的な問題などは何ですか? または、これを行うより良い方法はありますか?

アップデート:

アプリを強制的にハッキングして疑似マルチスレッド アプリにする代わりに、ここの善良な人々からのアドバイスを受けて、コンポーネントを標準の exe にリファクタリングし、アプリを標準の exe に戻してシェル経由で呼び出しました。美しく動作します:)

ありがとう

4

2 に答える 2

1

質問を少し明確にしてもらえますか?マルチスレッド化が必要な理由がわかりません。フォームを非モーダルで表示できないのはなぜですか。そうすれば、それらはすべて同時に表示され、応答します。メインフォームで常にバックグラウンド処理を実行している場合を除き、メインフォームだけでなく他のフォームもロックするため、質問からはありそうにないように思えます。


Melaos 氏は次のように述べています。メイン エディターの frm がここでの主なものであり、ユーザーが追加のフォームを実行して、サーバーへのアップロードやビデオ ファイルの他の形式への変換などの他の処理を実行できるようにする必要があります。そして、これらのフォームはシェルを使用して他のexeを呼び出します。そして、実行時間はかなりかかります。


その場合、難しいマルチスレッドを使用するのではなく、他のフォームを個別の EXE にすることをお勧めします。メイン フォームからサブフォームへの通信はほとんどないとおっしゃっていますが、表示されるだけです。したがって、サブフォームを ActiveX EXE にする必要さえありません。それらを標準の EXE にして、メイン フォームからシェルするだけです。

于 2009-02-25T12:20:13.700 に答える