2011-04-11 85 views
0

--ConsoleApplication 1单执行问题

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication2 
{ 
    public class MsgService 
    { 
     private static CreateConnectionToA _instanceA; 
     private static CreateConnectionToB _instanceB; 

     protected MsgService() 
     { 

     } 

     public static MsgService GetInstanceA(string paramA, string paramB) 
     { 

      if (_instanceA != null) 
      { 
       return _instanceA; 
      } 

      return _instanceA = new CreateConnectionToA("p1","p2"); 
     } 


     public static MsgService GetInstanceB(string paramA, string paramB) 
     { 

      if (_instanceB != null) 
      { 
       return _instanceB; 
      } 

      return _instanceB = new CreateConnectionToB("p1", "p2"); 
     } 


    } 




} 


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication2 
{ 
    class CreateConnectionToB : MsgService 
    { 
     public CreateConnectionToB(string param1, string Param2) 
     { 

     } 
    } 
} 


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication2 
{ 
    class CreateConnectionToA : MsgService 
    { 
     public CreateConnectionToA(string param1, string Param2) 
     { 

     } 

    } 
} 


using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      MsgService.GetInstanceA("p1", "p2"); 

      Console.Read(); 
     } 
    } 
} 

--ConsoleApplication 2

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Press"); 
      Console.Read(); 

      ConsoleApplication2.MsgService.GetInstanceA("p1", "p2"); 
      Console.Read(); 
     } 
    } 
} 

我试图让simgleton实现,但什么是错我的做法。它总是从每个控制台应用程序创建_instanceA和_instanceB的新实例。

有人可以请指出我需要做什么吗?

回答

3

您需要命名Mutexes进行进程间同步。

+1

直线上升,是的。如果我们没有被实现选择所约束,并且试图实现一个远程服务,我们强烈建议看看WCF(它有能力这样做)。 – 2011-04-11 16:13:43

+0

你能指点我的例子吗? – Asdfg 2011-04-11 16:19:55

+0

+1用于通过消息传递使用同步。 – GregC 2011-04-11 16:19:59

0

在两个应用程序之间共享一个对象实例很难,因为它们默认运行在不同的应用程序域中。要做到什么,我认为你正在试图做的,你需要跨越应用程序域边界要么

  • 元帅用,或
  • 在一个共享的AppDomain运行两个过程。编写第三个进程—一个shell —它负责产生/托管共享appdomain中的其他两个进程。

http://www.codeproject.com/KB/dotnet/AppDomainMemImprovement.aspx

Sharing data between AppDomains