如何将参数与方法一起发送到新线程?

Pat*_*ryk 2 c# multithreading

目前,我已经开始工作了:

public void logowanie()
{
int x=5,y=5;
...
}

private void button2_Click(object sender, EventArgs e)
        {
            Thread thread2 = new Thread(new ThreadStart(logowanie));
            thread2.Start();
            //logowanie("xd", "xd", "xd");

        }
Run Code Online (Sandbox Code Playgroud)

这很有效.有可能做出类似的东西

public int logowanie(int x, int y)
{
...
}

private void button2_Click(object sender, EventArgs e)
        {
            Thread thread2 = new Thread(new ThreadStart(logowanie(5,5)));
            thread2.Start();
            //logowanie("xd", "xd", "xd");

        }
Run Code Online (Sandbox Code Playgroud)

我刚刚开始使用线程.谢谢

Jon*_*eet 5

虽然你可以使用ParameterizedThreadStart,我可能只是使用lambda表达式:

private void button2_Click(object sender, EventArgs e)
{
    Thread thread2 = new Thread(() => logowanie(5, 5));
    thread2.Start();
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果在循环中调用它,则需要小心,因为lambda表达式捕获变量的方式:

// Broken (before C# 5)
foreach (string url in urls)
{
    new Thread(() => CrawlUrl(url));
}

// Fixed
foreach (string url in urls)
{
    string copy = url;
    new Thread(() => CrawlUrl(copy));
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这只是一个问题,在这种情况下,您捕获变量并且确实想要捕获当前值,但值得了解.