2009-05-30 28 views
1

我知道.Net和C#很好,但從來沒有看過VB。VB.NET是否自行執行任何多線程?

我的問題是:我們的Win32 COM庫被許多客戶端使用,並且我們發現使用VB庫(VB和VB.NET)的人的失敗次數要高於那些使用VB使用C++,C#或Delphi。關於我們的庫的一件事是,它應該只能從一個線程使用 - VB可以引導一些線程魔法是失敗的原因嗎?

客戶告訴我們不要自行創建任何額外的線程。

回答

4

VB.NET = C#語法稍有不同。嚴重的是,您可以在99%的時間內將VB.NET轉換爲C#行。如果你不知道它,這兩種語言都不會在你的鼻子下創建線程。

至多,如果你的客戶端使用VB.NET和Option Strict Off,那麼VB.NET的延遲綁定可能會導致比修復更多的問題 - 它很難確切知道你沒有看到實際的異常客戶正在報告。無論如何,將你的客戶失敗歸咎於自己的庫中不太熟練的程序員和錯誤,而不是VB.NET的代碼或微軟實現。

1

一種情況是Finalize方法。 CLR從與系統的垃圾收集器部分相關聯的後臺線程調用它們。最有可能的是,你的用戶不應該在Finalize中調用你的組件。

另請注意BackgroundWorker或委託BeginInvoke。儘管用戶不會自己創建「任何額外的線程」,但這些機制在與主GUI線程分離的線程池線程上執行代碼。

+0

這應該不是問題。如果他們正在使用STA COM對象,則CLR會在處理它們之前將這些呼叫封送回STA。 – JaredPar 2009-05-30 02:15:57

2

通過魔法,沒有。 VB.Net不會在底層做任何額外的線程。在這方面它和C#一樣。

VB6及更早版本可能會影響線程,因爲它的所有對象都是STA COM對象。這不會將任何線程添加到您的程序中,而只會限制可以訪問VB6對象的方式。