问题: 我试图将
ref
参数传递给将在单独线程内执行的方法。但是,在尝试直接将 ref
参数传递给线程时,我遇到了问题。这是我的代码的简化版本:
private void onMessageReceivedThreading(ref SMSDeliver myMessage)
{
onreceiveThread = new Thread(() => onMessageReceived(myMessage));
onreceiveThread.Start();
}
在此代码中,我想通过引用 (
myMessage
) 将 ref
传递给 onMessageReceived
方法,该方法将在新线程中执行。然而,这似乎并没有达到预期的效果。
如何正确地将
ref
参数传递给 C# 线程内的方法?使用线程时,是否有不同的方法或最佳实践来处理 ref
参数?
您可能会考虑将其分配给局部变量,例如:
private void onMessageReceivedThreading(ref SMSDeliver myMessage)
{
var mess = myMessage;
onreceiveThread = new Thread(()=> onMessageReceived(mess ));
onreceiveThread.Start();
}
值得一提(帖子中并不清楚)如果
myMessage
是一个引用类型,您仍然引用到类型的同一个实例,因此可能会遇到一些并发问题。请注意这一点。 myMessage
是一个值类型,这里可能不会发生并发问题(当你复制时,创建一个结构体的新实例),但是你需要注意如果onMessageReceived
影响mess
的状态以某种方式,将更改合并到原始 myMessage
实例,after 线程执行完成。