怎么把Thread Code(VB.net转换成C#)..?

时间:2019-03-28 05:33:26

标签: c# vb.net multithreading

如何将我的VB.net代码转换为C#..? 我想对线程使用循环功能。

  1. 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)的循环功能

  1. C#代码

          for (int i = 0; i <= _port_count; i++)
            {
                Thread worker = new Thread(looping);
                worker.Start(_list[i]);
                commThread.Add(worker);
            }
    

公共静态无效循环(PortList PortList){}

但是C#代码不起作用。 :(

感谢您的帮助。

3 个答案:

答案 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();