2009-05-30 19 views
1

Ich kenne .Net und C# ziemlich gut, aber schaute nie auf VB.Führt VB.NET selbst Multi-Threading durch?

Mein Problem ist: Unsere Win32-COM-Bibliothek wird von einer Reihe von Clients verwendet, und wir sehen, dass die Anzahl der Fehler höher ist für diejenigen, die die VB-Bibliothek (VB und VB.NET) verwenden Verwenden Sie C++, C# oder Delphi. Eine Sache an unserer Bibliothek ist, dass sie nur aus einem einzigen Thread verwendet werden soll - kann eine Threading-Magie von VB die Ursache für Fehler sein?

Clients sagen uns, dass Sie keine zusätzlichen Threads auf eigene Faust erstellen.

Antwort

4

VB.NET = C# mit einer etwas anderen Syntax. Im Ernst, Sie können VB.NET in 99% der Fälle Zeile für Zeile in C# übersetzen. Keine Sprache schafft Fäden unter deiner Nase, ohne dass du davon weißt.

Wenn Ihre Clients VB.NET mit Option Strict Off verwenden, kann die späte Bindung von VB.NET mehr Probleme verursachen, als sie beheben - es ist schwer zu wissen, ohne die tatsächlichen Ausnahmen zu sehen Kunden berichten. In jedem Fall, schreiben Sie Ihre Kunden Fehler zu weniger geschickte Programmierer und Fehler in ihrer eigenen Bibliothek, nicht zu Ihrem Code oder Microsofts Implementierung von VB.NET.

1

Ein Fall ist Finalize-Methoden. Die CLR ruft sie von Hintergrundthreads auf, die dem Speicherbereinigungsteil des Systems zugeordnet sind. Höchstwahrscheinlich sollten Ihre Benutzer Ihre Komponente nicht innerhalb von Finalize aufrufen.

Achten Sie auch auf den BackgroundWorker oder Delegate BeginInvoke. Obwohl der Benutzer "keine zusätzlichen Threads für sich selbst" erstellt, führen diese Mechanismen Code in einem Threadpool-Thread aus, der vom Hauptthread der GUI getrennt ist.

+0

Dies sollte jedoch kein Problem sein. Wenn sie STA COM-Objekte verwenden, wird die CLR die Anrufe zurück in die STA übertragen, bevor sie verarbeitet werden. – JaredPar

2

Durch Magie, nein. VB.Net wird kein zusätzliches Threading unter der Haube machen. In dieser Hinsicht ist es das gleiche wie C#.

VB6 und früher können das Threading beeinflussen, da alle Objekte STA COM-Objekte sind. Dies fügt Ihrem Programm keine Threads hinzu, sondern beschränkt lediglich die Art und Weise, in der auf die VB6-Objekte zugegriffen werden kann.

Verwandte Themen