如何将我的VB.net代码转换为C#..? 我想对线程使用循环功能。
VB.Net代码
For i As Integer = 0 To _port_count
Dim worker As New Threading.Thread(AddressOf looping)
worker.Start(_list(i))
commThread.Add(worker)
Next
公共子循环(Byvar PortList作为PortList)的循环功能
C#代码
for (int i = 0; i <= _port_count; i++)
{
Thread worker = new Thread(looping);
worker.Start(_list[i]);
commThread.Add(worker);
}
公共静态无效循环(PortList PortList){}
但是C#代码不起作用。 :(
感谢您的帮助。
答案 0 :(得分:0)
什么是循环函数的声明?
还有更多信息?
这是Microsoft Docs中的示例。
using System;
using System.Threading;
public class Work
{
public static void Main()
{
// Start a thread that calls a parameterized static method.
Thread newThread = new Thread(Work.DoWork);
newThread.Start(42);
// Start a thread that calls a parameterized instance method.
Work w = new Work();
newThread = new Thread(w.DoMoreWork);
newThread.Start("The answer.");
}
public static void DoWork(object data)
{
Console.WriteLine("Static thread procedure. Data='{0}'",
data);
}
public void DoMoreWork(object data)
{
Console.WriteLine("Instance thread procedure. Data='{0}'",
data);
}
}
// This example displays output like the following:
// Static thread procedure. Data='42'
// Instance thread procedure. Data='The answer.'
链接:https://msdn.microsoft.com/en-us/library/1h2f2459(v=vs.110)
答案 1 :(得分:0)
将循环方法签名更改为以下内容:
public static void looping (object PortList)
正如documentation所说,作为线程构造函数参数传递的ParameterizedThreadStart
必须为object
。
答案 2 :(得分:0)
Thread
构造函数将采用ThreadStart
委托或ParameterizedThreadStart
委托。第一个没有参数,第二个没有类型object
的参数。如果您使用的是命名方法,则它必须匹配这两个签名之一,而您的签名不匹配。 VB将允许您做错事,并尝试为您清理,但C#希望您自己做正确的事。如今,如果您要调用签名不匹配的方法,则可以使用具有匹配签名的Lambda,然后在其中调用您的方法:
Thread worker = new Thread(() => looping(_list[i]));
worker.Start();