如何将 ref 参数传递给在 C# 中单独线程中运行的方法?

问题描述 投票:0回答:1

问题: 我试图将

ref
参数传递给将在单独线程内执行的方法。但是,在尝试直接将
ref
参数传递给线程时,我遇到了问题。这是我的代码的简化版本:

private void onMessageReceivedThreading(ref SMSDeliver myMessage)
    {
        onreceiveThread = new Thread(() => onMessageReceived(myMessage));
        onreceiveThread.Start();
    }

在此代码中,我想通过引用 (

myMessage
) 将
ref
传递给
onMessageReceived
方法,该方法将在新线程中执行。然而,这似乎并没有达到预期的效果。

如何正确地将

ref
参数传递给 C# 线程内的方法?使用线程时,是否有不同的方法或最佳实践来处理
ref
参数?

c# multithreading parameters arguments
1个回答
0
投票

您可能会考虑将其分配给局部变量,例如:

private void onMessageReceivedThreading(ref SMSDeliver myMessage)
{
      var mess = myMessage; 
      onreceiveThread = new Thread(()=> onMessageReceived(mess ));
      onreceiveThread.Start();
}

值得一提(帖子中并不清楚)如果

  • myMessage
    是一个引用类型,您仍然引用到类型的同一个实例,因此可能会遇到一些并发问题。请注意这一点。

  • myMessage
    是一个值类型,这里可能不会发生并发问题(当你复制时,创建一个结构体的新实例),但是你需要注意如果
    onMessageReceived
    影响
    mess
    的状态以某种方式,将更改合并到原始
    myMessage
    实例,after 线程执行完成。

© www.soinside.com 2019 - 2024. All rights reserved.