2009-05-30 21 views
1

私は.NetとC#をよく知っていますが、VBで見たこともありません。VB.NETは単独でマルチスレッドを実行しますか?

私の問題は、私たちのWin32 COMライブラリは多くのクライアントによって使用されており、VB(VBとVB.NETの両方)からのライブラリを使用する人の方が、 C++、C#、またはDelphiを使用してください。私たちのライブラリに関する1つのことは、それが1つのスレッドのみから使用されるはずです - VBによるスレッディングマジックが失敗の原因になりますか?

クライアントは、余分なスレッドを自分で作成しないように指示します。

答えて

4

VB.NET = C#の構文が少し異なります。真剣に、VB.NETをC#line-for-lineの99%に翻訳することができます。どの言語も、あなたがそれについて知ることなく、あなたの鼻の下にスレッドを作成しません。

ほとんどの場合、クライアントがOption Strict OffでVB.NETを使用している場合、VB.NETの遅延バインディングは修正されるよりも多くの問題を引き起こす可能性があります。実際の例外を見ることなく、クライアントが報告しています。いずれにせよ、お客様のコードやMicrosoftのVB.NET実装ではなく、自分のライブラリでの熟練度の低いプログラマーやバグまで、クライアントの失敗をチョークしてください。

1

1つのケースはファイナライズメソッドです。 CLRは、システムのガベージコレクタ部分に関連付けられたバックグラウンドスレッドからそれらを呼び出します。ほとんどの場合、ユーザーはFinalize内からコンポーネントを呼び出してはいけません。

また、BackgroundWorkerまたはBeginInvokeを参照してください。ユーザーは「独自の余分なスレッドを作成しませんが、これらのメカニズムはメインのGUIスレッドとは別のスレッドプールスレッドでコードを実行します。

+0

これは問題ではありません。彼らがSTA COMオブジェクトを使用している場合、CLRはそれらを処理する前にコールをSTAにマーシャリングします。 – JaredPar

2

魔法によって、 VB.Netはフードの下で余分なスレッディングをしません。これに関しては、C#と同じです。

VB6以前では、すべてのオブジェクトがSTA COMオブジェクトになるため、スレッディングに影響を与える可能性があります。これはプログラムにスレッドを追加するのではなく、単にVB6オブジェクトにアクセスする方法を制限するだけです。

関連する問題