如何仅在windows服务完成时继续执行代码

本文关键字:继续 执行 代码 完成时 服务 何仅 windows | 更新日期: 2023-09-27 17:53:55

我有一个Windows服务,它执行一个相当长的运行任务。此时,我生成一个新线程,该线程执行一个方法,该方法关闭并调用此windows服务。这段代码看起来像:

Thread thread = new Thread(new ThreadStart(ExecyuteLongRunningMethod));
thread.Start();
thread.Join();

在调用堆栈的更高层(当这段代码完成时),会弹出一个消息框,说明操作的结果。

然而,当这段代码执行时(ExecuteLongRunningMethod调用windows svc),弹出一个消息框,说明操作没有改变任何结果,但是因为这是在上面的代码块完成之前,出现了错误的消息框。

因此,问题是,只有当windows服务结束时,才能继续在winforms应用程序中执行(这就是所谓的windows svc),这是什么合适的方法?我认为上面的方法是不正确的,因为线程会调用windows服务(另一个进程),所以当windows服务做它的东西时,我的代码(winforms应用程序)将继续。要么需要某种类型的信号,要么需要像命名管道这样的东西?

应用程序是在。net 3.5。

谢谢

如何仅在windows服务完成时继续执行代码

通过WCF API公开服务执行的状态,并使用netcp或命名管道调用它,您可以轮询服务或使用WCF CallBack

为什么不使用一个BackgroundWorker,这样你就可以为它的完成设置一个事件呢?
在Backgroundworker运行方法中,你可以运行服务并等待一个手动重置事件(例如)或一个互斥锁,当收到这个事件时,你可以退出main方法。因此,OnCompleted事件在主线程(例如UI)中引发,工作完成…

在你的应用程序中添加一个Backgroundworker并命名为bgw。然后你可以这样做:

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
    // 1. Run the service
    // 2. Wait for mutex
}
private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    // Here you can handle the end of the service
    // and return the status in main thread
}