سلام
... توی تاپیک vb.net ...
الآن کد VB میخواهید یا #c?

اما اگه ما نخوایم که مقدار رو از نوع Obj ارسال کنیم چی ؟!!
یک مقدار این موضوع گنگه چون اگه همه مقادیر ارسالی رو بخوایم با تبدیل به این صورت ارسال کنیم کارایی و ... برنامه میاد پایین ... مثلا من میخوام یه String و یک TreeNode ارسال کنم ولی اونجوری نمیشه این کارو کرد ؟! اگه یک مقدار بیشتر توضیح بدین ممنون میشم ...
این مسئله خیلی مهم و پیچیده ای نیست.
اولاً که شما راه های مختلفی دارید (که در پایین مثال میزنم)
بعد هم سرعت و بازدهی به سه دلیل عمده کاهش نمی یابد ...
1) فرمان قالب ریزی مستقیم سرعت بسیار زیادی دارد (DirectCast)
2) نصف این تبدیل فوق العاده سریع در ریسمان جدید انجام میشود که قرار است کار سنگینی انجام دهد ...
(مثل جمع عدد 1 با عدد 1000 می ماند که عملاً بی تاثیر است)

3) برنامه شما در حلقه کار نمیکند و این عمل فقط و فقط یکبار انجام میشود.
اصولاً هر کجا کاهش سرعت داریم، همانجا نوعی حلقه پیدا/پنهان داریم که کاری را مدام و مدام انجام میدهد.

روش اول:

//C#‎.Net
public void AsyncStart()
{
int param1 = 14;
string param2 = "14";
DateTime param3 = DateTime.UtcNow;

System.Threading.Thread thread = new System.Threading.Thread(this.Start);
thread.IsBackground = true;
thread.Start(new object[] { param1, param2, param3 });
}

private void Start(object obj)
{
object[] arr = (object[])obj;
int param1 = (int)arr(0);
string param2 = (string)arr(1);
DateTime param3 = (DateTime)arr(2);
//...
}


'VB.Net
Public Sub AsyncStart()
Dim param1 As Integer = 14
Dim param2 As String = "14"
Dim param3 As Date = Date.UtcNow

Dim thread As New System.Threading.Thread(AddressOf Me.Start)
thread.IsBackground = True
thread.Start(New Object() {param1, param2, param3})
End Sub

Private Sub Start(ByVal obj As Object)
Dim arr() As Object = DirectCast(obj, Object())
Dim param1 As Integer = DirectCast(arr(0), Integer)
Dim param2 As String = DirectCast(arr(1), String)
Dim param3 As Date = DirectCast(arr(2), Date)
'...
End Sub


روش دوم:

//C#‎.Net
private struct ParamList
{
public int param1;
public string param2;
public DateTime param3;
}

public void AsyncStart()
{
ParamList param = new ParamList();
param.param1 = 14;
param.param2 = "14";
param.param3 = DateTime.UtcNow;

System.Threading.Thread thread = new System.Threading.Thread(this.Start);
thread.IsBackground = true;
thread.Start(param);
}

private void Start(object obj)
{
//...
ParamList param = (ParamList)obj;
}


'VB.Net
Private Structure ParamList
Public param1 As Integer
Public param2 As String
Public param3 As Date
End Structure

Public Sub AsyncStart()
Dim param As New ParamList
param.param1 = 14
param.param2 = "14"
param.param3 = Date.UtcNow

Dim thread As New System.Threading.Thread(AddressOf Me.Start)
thread.IsBackground = True
thread.Start(param)
End Sub

Private Sub Start(ByVal obj As Object)
Dim param As ParamList = DirectCast(obj, ParamList)
'...
End Sub


روش سوم:

//C#‎.Net
private sealed class WapperClass
{
public int param1;
public string param2;
public System.DateTime param3;

public void AsyncStart()
{
System.Threading.Thread thread = new System.Threading.Thread(this.Start);
thread.IsBackground = true;
thread.Start(param);
}

private void Start()
{
//...
}

}

'VB.Net
Private NotInheritable Class WapperClass
Public param1 As Integer
Public param2 As String
Public param3 As Date

Public Sub AsyncStart()
Dim thread As New System.Threading.Thread(AddressOf Me.Start)
thread.IsBackground = True
thread.Start(param)
End Sub

Private Sub Start()
'...
End Sub

End Class


یه تابع هست که مثلا 2 مقدار میگیره و اجرا میشه و n دفعه خودش رو با 2 مقدار جدید راه اندازی میکنه
فرمایشاتی میفرمایید برادر، اینهاکه دیگر مسئله ندارد
با همان روش اول هم که به نظر شما بدترین روش است به همین سادگی قابل حل است!!!

//C#‎.Net
private void Start(object obj)
{
object[] arr = (object[])obj;
int param1 = (int)arr(0);
string param2 = (string)arr(1);
DateTime param3 = (DateTime)arr(2);

this.Start(param1, param2, param3);
}

private void Start(int param1, string param2, DateTime param3)
{
//...
if (...) this.Start(param1+1, param2+"1", param3.AddSeconds(1.0d));
//...
if (...) this.Start(param1+2, param2+"2", param3.AddSeconds(2.0d));
//...
}

'VB.Net
Private Sub Start(ByVal obj As Object)
Dim arr() As Object = DirectCast(obj, Object())
Dim param1 As Integer = DirectCast(arr(0), Integer)
Dim param2 As String = DirectCast(arr(1), String)
Dim param3 As Date = DirectCast(arr(2), Date)
Me.Start(param1, param2, param3)
End Sub

Private Sub Start(ByVal param1 As Integer, ByVal param2 As String, ByVal param3 As Date)
'...
If (...) Then Me.Start(param1+1, param2+"1", param3.AddSeconds(1.0#))
'...
If (...) Then Me.Start(param1+2, param2+"2", param3.AddSeconds(2.0#))
'...
End Sub


باز هم میبخشید که نتوانستم زودتر جواب دهم.
موفق باشید.