c# - 单例实现在 32 位但不是 64 位上工作正常

标签 c# multithreading 64-bit singleton

我正在开发一个具有共享对象的应用程序,该对象可通过单例访问。它在 32 位上工作正常,但在 64 位上它似乎没有正确锁定。在我的对象的构造函数中,我有代码检查一些配置注册键并在它们不存在时提示用户。在 32 位上,我按预期只看到一次提示,但在 64 位上,提示显示了多次。我的代码如下:

    private static readonly object padlock = new object();
    private static MyClass _instance = null;
    public static MyClass Instance
    {
        get
        {

            lock (padlock)
            {
                if (_instance == null)
                {
                    _instance = new MyClass();
                }
            }
            return _instance;
        }
    }

非常感谢任何输入。

编辑以包含示例用法:

    public OtherObject()
    {
        InitializeComponent();

        MyClass.Instance.OtherObjectOrSomething = this;

        this.Load += new System.EventHandler<EventArgs>(OtherObject_Load);
    }

再次编辑 这是在 Office 加载项中运行的。因此,位数由办公室的安装决定。我定义了一个私有(private)的无参数构造函数。

谢谢

移除了略微匿名的构造函数

最佳答案

它可能是构造函数中代码的内部原因,导致出现多个提示。注册表的 View 将不同于 32 位进程和 64 位进程,因此它们可以响应不同的外部条件

关于c# - 单例实现在 32 位但不是 64 位上工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187090/

相关文章:

c# - 如何在 C# 中实现一种机制,仅当前一个任务未在特定时间内完成时才启动任务?

c++ - 没有 .net 的预编译 SQLite x64

c# - LinearGradientBrush 无法正确呈现

java - JVM 在并行处理方面有多好?我什么时候应该创建自己的线程和可运行对象?为什么线程会干扰?

android - 无法在工作线程上同步获取 firebase id token

eclipse - Windows 上的 javahl subclipse 64 位安装

delphi - 如何从 VCL.Graphics 获取所有已注册的文件格式...但 64 位

c# - 控制台应用程序作为连续的 Azure Webjob 不会转换 UTC 格式的 Time.ToUniversalTime()

c# - 多核机器上的多线程没有最大化 CPU

c# - 从 paypal 沙箱中获取响应