我创建一个自定义。网硬件框架将使用的其他程序来控制某些硬件。他们将增加一个参考我们的DLL得到我们的硬件框架。我需要一个共享类,将可从多种应用(程序).

单一模式似乎是我所需要的,但它仅适用于多线程的内部过程。我可能是完全错误的,但这是一个例子C#码我目前所拥有的。我不能帮助感到,设计中是不正确的。我希望我可以分享的更具体的信息,但我不能。

  • 我必须强调,我将没有任何控制的客户应用程序。该解决方案必须包含的内部框架(DLL)本身。

该框架:(共同DLL)

public class Resources
{
    static readonly Resources m_instance = new Resources();

    public string Data;

    private Resources()
    {
        Data = DateTime.Now.ToString();
    }

    public static Resources Instance
    {
        get
        {
            return m_instance;
        }
    }
} 

的测试的应用程序:(最终客户的应用程序)

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Press enter to capture the resource!");
        Console.ReadLine();

        var resources = Resources.Instance;
        Console.WriteLine("\r\n{0}: {1}\r\n", Thread.CurrentThread.ManagedThreadId, resources.Data);

        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += WorkerDoWork;
        worker.RunWorkerAsync();

        while (worker.IsBusy)
        {
            Thread.Sleep(100);
        }

        Console.WriteLine("Press enter to close the process!");
        Console.ReadLine();
    }

    static void WorkerDoWork(object sender, DoWorkEventArgs e)
    {
        var resources = Resources.Instance;
        Console.WriteLine("\r\n{0}: {1}\r\n", Thread.CurrentThread.ManagedThreadId, resources.Data);
    }
}

第一启动的应用程序提供了一个输出:

按客捕获的资源!

1:6/24/2009 8:27:34AM

3:6/24/2009 8:27:34AM

按进入关闭的过程!

第二个应用程序提供了一个输出:

按客捕获的资源!

9:6/24/2009 8:27:35

10:6/24/2009 8:27:35

按进入关闭的过程!

结论:

我希望看到这两个应用程序,返回同一串的第一个实例。

正如你所看到的单独工作的多线程的内部进程,但没有跨过程。也许这不能做为我似乎无法找到任何解决方案。

有帮助吗?

解决方案

你不能使用一个单独以同步的应用。每个运行在其自己的应用程序空间,并且作为一个安全问题无法存取存储器的对象。从没有其他通信的方法(如远程处理)同步的两个他们将以远程进入一个第三节目。

其他提示

是的这是可能分享一个单独的其中几个进程。然而你会需要采取优势的一个技术支持的进程间的通信为了实现这一结果。

最受欢迎的技术能让你分享你的对象的相当直接的远程处理和WCF。

给一个例子共用一个单独与这些是超出范围如此的答案。但有很多教程在网络上为每个这些。谷歌上搜索无论是技术再加上单独应该把你放在正确的道路。

添加到凯文的答案,你的构造你的类资源的真正应该由私人对它是一个真正的单,否则没有什么是阻止创建一个新的实例的资源流通的构造。这不会解决你的问题,但它不会停止一个从滥用的单例。

只是要求一个单独的财产在一个不同的组件从两个不同的进程将创造不同实例,类。

但是你可以很容易地分享信息的进程之间的使用。净 远程处理, 或火进程的事件,如果你只需要简单的信(安全访问).

[编辑:] 使它看起来像一个单独到你的呼叫者,可以获得的一类,它将在内部使用远程处理一个单独的实例,然后返回实例的透明度。这例子哪(我)做的是: http://www.codeproject.com/KB/dotnet/remotingsingleton.aspx

有的方式来做到这一点,如上文所述。但它是笨拙的如果你使用WCF或远程处理。请尝试进程间线同步的技术。

更多信息,读取的网上免费的电子图书关于穿

http://www.albahari.com/threading/

特别见交进程同步构建这里...

http://www.albahari.com/threading/part2.aspx#_Synchronization_Essentials

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top