在线程中运行参数化方法

发布于 2024-12-09 01:17:39 字数 302 浏览 0 评论 0原文

我目前正在开发 ac# 项目,我需要一个有 1 个参数的方法作为线程运行。

例如,

    public void myMethod(string path)
    {
       int i = 0;
       while (i != 0)
       {
          Console.WriteLine("Number: " + i);
          i++;
       }
    }

如何从另一个方法调用上述方法,但在线程内运行。

感谢您提供的任何帮助。

I am currently working on a c# project and I need to have a method which has 1 paramater to run as a thread.

E.g.

    public void myMethod(string path)
    {
       int i = 0;
       while (i != 0)
       {
          Console.WriteLine("Number: " + i);
          i++;
       }
    }

How can I call the above method from another method, but running inside a thread.

Thanks for any help you can provide.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绮烟 2024-12-16 01:17:39

最简单的方法通常是使用匿名方法或 lambda 表达式:

string path = ...;

Thread thread = new Thread(() => MyMethod(path));
thread.Start();

可以使用ParameterizedThreadStart,但我通常不会。

请注意,如果您在循环中执行此操作,则需要注意正常的-loop-variable-considered-harmful.aspx" rel="nofollow">"关闭循环变量" 危险:

// Bad
foreach (string path in list)
{
    Thread thread = new Thread(() => MyMethod(path));
    thread.Start();
}

// Good
foreach (string path in list)
{
    string copy = path;
    Thread thread = new Thread(() => MyMethod(copy));
    thread.Start();
}

The simplest way is generally to use an anonymous method or lambda expression:

string path = ...;

Thread thread = new Thread(() => MyMethod(path));
thread.Start();

You can use a ParameterizedThreadStart, but I generally wouldn't.

Note that if you do it in a loop, you need to be aware of the normal "closing over the loop variable" hazard:

// Bad
foreach (string path in list)
{
    Thread thread = new Thread(() => MyMethod(path));
    thread.Start();
}

// Good
foreach (string path in list)
{
    string copy = path;
    Thread thread = new Thread(() => MyMethod(copy));
    thread.Start();
}
掩耳倾听 2024-12-16 01:17:39
new Thread(o => myMethod((string)o)).Start(param);
new Thread(o => myMethod((string)o)).Start(param);
像极了他 2024-12-16 01:17:39

只需将该方法调用包装在一个不带参数的方法中,但该方法使用正确的参数调用您的方法。

public void myWrappingMethod()
{
    myMethod(this.Path);
}

public void myMethod(string path)
{
    // ...
}

或者,如果您有可用的 lambda,只需使用其中之一(根据 Jon Skeet 的回答)。

Simply wrap that method call in a method that takes no parameters, but which calls your method with the right parameter.

public void myWrappingMethod()
{
    myMethod(this.Path);
}

public void myMethod(string path)
{
    // ...
}

Or if you have lambdas available, simply use one of those (per Jon Skeet's answer).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文