3

私の Windows サービスは、OnStart() メソッドで 1 つのスレッドを作成しています。thread のコードには 1 つの while ループが含まれており、次のようになります。

    Thread mworker;       
    AutoResetEvent mStop = new AutoResetEvent(false); 
     protected override void OnStart(string[] args)
{
    // TODO: Add code here to start your service.

    mworker = new Thread(pwd_fetch);
    mworker.IsBackground = false;
    mworker.Start();
}

protected override void OnStop()
{
    // TODO: Add code here to perform any tear-down necessary to stop your service.
    mStop.Set();
    mworker.Join();
}

private void pwd_fetch()
{
    while(true)
    {
        //some other code

        if (mStop.Set()==true)
            break;
    }
}

while ループ条件を true にしたいのですが、ループを中断するために if() 命令を使用していますが、サービスを停止できません。

なぜそうなのか、誰にもわかりますか?どうすればこの問題を解決できますか?

4

5 に答える 5

2

スレッド ループ メソッドでは、mStop.WaitOne (タイムアウト付き) を使用する必要があります。set を呼び出すと、ハンドルが設定されます...それはここでやりたいことではありません。

 if (mStop.WaitOne(500))
     break;
于 2012-06-28T10:07:28.503 に答える
2

サービスを停止するには、servicecontroller インスタンスを呼び出して停止する必要があります

ServiceController service = new ServiceController("ServiceName");
service .Stop();
于 2012-06-28T10:05:44.870 に答える
0

開始時ではなく、サービス開始イベントにスレッドコードを追加する必要があります。

于 2012-06-28T10:17:24.143 に答える
0

サービス自体を停止したい場合は、次のように呼び出すだけです。

this.Stop()
于 2012-06-28T10:08:23.083 に答える
0

1. while ループでは常に「true」の代わりにブール変数を使用します。その後、ループ内のコードを終了する必要がある場合は false に設定できます。

2. mworker.Abort() を呼び出してスレッドを停止します。

3.サービス停止

new ServiceController("ServiceName").Stop();

于 2012-07-04T06:35:17.103 に答える