0

私のプロジェクトではbottom、Windows サービスを開始してチェックし、Windows サービスのステータスをtextBlockコントロールに書き込むコントロールがあります。ただし、問題は、「Windows サービスが実行中です」、「Windows サービスが停止しています」、「Windows サービスが実行中です」と表示されることです。

これは、「A」から「B」、そして「A」のようになります。

先頭に「A」を付けずに、「B」から「A」に流れるようにしたいです。

private void btnStart_Click(object sender, RoutedEventArgs e)
{
    if (ValidationHelpers.IsValid())
        StartService();
    else
        _serviceControll.StopService();
}

  private void StartService()
        {
            try
            {
                if (!_serviceIsStarted)
                {
                    if (_serviceControll.StartService())
                    {

                        var startThread = new Thread(new ThreadStart(CheckStartService));
                        startThread.Start();

                        statusTextBlock.Text = "Offline IM service is running";
                        statusTextBlock.Foreground = Brushes.Black;
                    }
                    else
                    {
                        statusTextBlock.Text = "Offline IM service is stopped";
                        statusTextBlock.Foreground = Brushes.Red;
                    }
                }
            }
            catch (Exception exception)
            {

                statusTextBlock.Text = "Error in starting the Offline IM service " + exception.Message.ToString();
                statusTextBlock.Foreground = Brushes.Red;
            }
        }



    private void CheckServiceStatus()
    {
        try
        {
            if (_serviceControll.CheckServiceStatus())
            {
                statusTextBlock.Text = "Offline IM service is running";
                statusTextBlock.Foreground = Brushes.Black;
                _serviceIsStarted = true;
            }
            else
            {
                statusTextBlock.Text = "Offline IM service is stopped";
                statusTextBlock.Foreground = Brushes.Black;
                _serviceIsStarted = false;
            }
        }
        catch (Exception exception)
        {
            statusTextBlock.Text = "Error in getting the Offline IM service status " + exception.Message.ToString();
            statusTextBlock.Foreground = Brushes.Red;
        }
    }


  private void CheckStartService()
        {
            var set = true;
            while (set)
            {
                if (_serviceControll.CheckServiceStatus())
                {
                    MessageBox.Show(@"Offline IM service is started", "Offline IM Configuration Manager",
                                          MessageBoxButton.OK, MessageBoxImage.Information);
                    _serviceIsStarted = true;
                    set = false;
                }
            }
            return;
        }


    private void DispatcherTimerTick(object sender, EventArgs e)
    {
        if (_serviceControll != null)
        {
            CheckServiceStatus();
        }

    }

}
4

1 に答える 1

0

一つ、これは良くありません。

   startThread.Start();

   statusTextBlock.Text = "Offline IM service is running";
   statusTextBlock.Foreground = Brushes.Black;

スレッドを開始したからといって、サービスが実行されているわけではありません。

これは私はまったくフォローしていません

if (_serviceControll.CheckServiceStatus())

投稿した CheckServiceStatus() は void を返します

于 2012-09-12T22:34:34.293 に答える