2011-04-11 49 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