C# 多线程访问同一实例

C# 多线程访问同一实例,c#,.net,multithreading,thread-safety,C#,.net,Multithreading,Thread Safety,它是如何实现的。我的不起作用。通常最好有一个私有对象用作锁,但只要MyClass是一个引用类型,你所做的就应该起作用。我认为构造函数中的代码在ChangeItem启动之前执行,因此您没有看到任何争用。试着在调用taskdelay()之后放置一个线程。Sleep(1000),,我想你有一个“竞争条件”changeem。否则,您的代码应该按预期工作 您可以通过添加一些睡眠来检查它 lock (class1) { txtName.Text = class1.Name; } 您是否希望在构造

它是如何实现的。我的不起作用。

通常最好有一个
私有对象
用作锁,但只要
MyClass
是一个引用类型,你所做的就应该起作用。我认为构造函数中的代码在
ChangeItem
启动之前执行,因此您没有看到任何争用。试着在调用taskdelay()之后放置一个
线程。Sleep(1000)
,,

我想你有一个“竞争条件”<当您在构造函数中获取
lock(class1)
时,可能尚未调用code>changeem。否则,您的代码应该按预期工作

您可以通过添加一些睡眠来检查它

lock (class1)
{
     txtName.Text = class1.Name;
}

您是否希望在构造函数完成之前运行ChangeItem()方法?使用async关键字指示编译器在启动它之前等待,直到它没有其他事情要做。在给定的场景中,构造函数完成后始终会调用ChangeItem()方法working@SriramSakthivel我所展示的场景……这里不起作用。不起作用可能有任何意义。不编译吗?例外提供意外的输出?如果是,什么?请解释一下。我们不能guess@SriramSakthivel:这意味着,我想要的情况是,只要ChangeItem()将内容更改为“anup”,我就不能访问MainMethod()中的class1.Name。我希望你得到我想要的。谢谢:)@Vikram
lock (class1)
{
     txtName.Text = class1.Name;
}
CallingTaskDelay();
Thread.Sleep(100);//For debugging, just give some time for  `CallingTaskDelay` to call `ChangeItem`
MyClass class1 = collection[0];
lock (class1)
{
    txtName.Text = class1.Name;
}