0

サービスベースに2つのサービスがあり、onstartメソッドは無限ループです(AsyncReadContextの方法を使用して行われます)が、サービスを開始すると、リストの最初にあり、2番目のサービスのonstartに来るサービスが開始されます。いくつかのコード:

           ServiceBase[] ServicesToRun;

            ServicesToRun = new ServiceBase[]
            {
                            new Service1(),
                new Service 2(),
            };

            ServiceBase.Run(ServicesToRun);

開始時:

 protected override void OnStart(string[] args)
        {
//read MsMQ async way
}

サービス 1 はキューを読み取っていますが、サービス 2 はキューを読み取っていません。サービス2をリストの最初に変更すると、サービス2がキューを読み取っているときと同じコードになります。ここでは、2 つのサービスのキューが異なります。

4

2 に答える 2

2

実際の作業を行うOnStart-メソッドで別のスレッドを開始する必要があります。

たとえば、匿名メソッドの場合:

var t = new Thread(new ThreadStart(() => {
   //Actual work here
}));
t.Start();

これにより、OnStartメソッドがすぐに終了し、2番目のサービスも起動するはずです。

于 2012-05-01T16:52:45.097 に答える
0

私のコードに問題がありました。Service1 と Service 2 の 2 つのサービスであり、serviceinstaller によってインストールされません。serviceIntaller に変更し、ServiceInstaller を ProjectInstaller に変更したとき。私は1093エラーで、サービスを開始できませんでした。これは、サービスの問題のクラス名に変更すると、サービスのサービス名が同じであるためです。

于 2012-05-02T11:26:42.223 に答える