C#.NET WPF中的基本线程锁定

C#.NET WPF中的基本线程锁定,c#,wpf,multithreading,thread-safety,C#,Wpf,Multithreading,Thread Safety,这似乎是一个基本的问题,但谷歌没有帮助我。。。如何在C#.NET WPF中执行基本线程锁定?在我相当简单的用户应用程序中,我有多个线程执行时间密集型操作,这些操作将其结果保存到一个公共数据结构中或从该公共数据结构中读取。我希望能够锁定()和解锁()访问此数据结构,以维护线程安全。然而,在我的代码中,有许多不同的地方可以访问这个数据结构,而不仅仅是一个地方。哪些.NET对象用于实现此锁定?请尝试以下操作: public static class LockHolder { public st

这似乎是一个基本的问题,但谷歌没有帮助我。。。如何在C#.NET WPF中执行基本线程锁定?在我相当简单的用户应用程序中,我有多个线程执行时间密集型操作,这些操作将其结果保存到一个公共数据结构中或从该公共数据结构中读取。我希望能够锁定()和解锁()访问此数据结构,以维护线程安全。然而,在我的代码中,有许多不同的地方可以访问这个数据结构,而不仅仅是一个地方。哪些.NET对象用于实现此锁定?

请尝试以下操作:

public static class LockHolder
{
    public static object Lock = new object();
}
然后,在代码中使用:

lock(LockHolder.Lock)
{
    //your safe code
}

我想多了解一些信息可能会有帮助。IIRC,
lock(object o)
基本上是一个宏,编译器将对其进行扩展,然后限制对安全代码的访问,这是您所期望的。不一定很明显的是任何对象
o
都可以是锁,每个
o
都是每个安全锁所需要的。如果我有

object a = new object();
object b = new object();
然后执行一个
锁(a)
,这样就不会阻止对周围有
锁(b)
的东西的访问。大多数代码示例显示一个
锁(this)
,该锁将锁定到特定类的当前实例,如果您需要全局锁并且该类的多个实例正在运行,则这不是您想要的。请尝试以下操作:

public static class LockHolder
{
    public static object Lock = new object();
}
然后,在代码中使用:

lock(LockHolder.Lock)
{
    //your safe code
}

我想多了解一些信息可能会有帮助。IIRC,
lock(object o)
基本上是一个宏,编译器将对其进行扩展,然后限制对安全代码的访问,这是您所期望的。不一定很明显的是任何对象
o
都可以是锁,每个
o
都是每个安全锁所需要的。如果我有

object a = new object();
object b = new object();

然后执行一个
锁(a)
,这样就不会阻止对周围有
锁(b)
的东西的访问。大多数代码示例显示一个
锁(this)
,它将锁定特定类的当前实例,如果您需要全局锁并且该类的多个实例正在运行,则这不是您想要的。

它可能更易于使用,例如命名空间中的实例。它们为您完成所有工作。

使用名称空间中的名称空间可能更容易。它们为您完成所有工作。

实现同步有多种方法。请看我创建的屏幕截图

实现同步有多种方法。请看我创建的屏幕截图
查看Sacha Barber关于CodeProject的这篇精彩文章

它解释了一些同步机制


干杯

查看Sacha Barber关于CodeProject的这篇精彩文章

它解释了一些同步机制


干杯

我发现很难相信你在C#中找不到关于线程同步的东西,使用谷歌,甚至是搜索引擎。。。搜索“lock”、“manualresetevent”、“monitor”、“interlocked”……lock语句是开始研究的好地方,并且是默认答案,除非您需要更复杂的语义:尝试使用
http://searchdotnet.com
来做.NET搜索。我发现很难相信你在C#中找不到关于线程同步的东西,使用Google,甚至是SO搜索。。。搜索“lock”、“manualresetevent”、“monitor”、“interlocked”……lock语句是开始研究的好地方,并且是默认答案,除非您需要更复杂的语义:尝试使用
http://searchdotnet.com
进行.NET搜索。虽然这很好,但它并没有真正回答问题-在什么情况下应该使用哪一个?虽然这很好,但它并没有真正回答问题-在什么情况下应该使用哪一个环境?