C# - 如何访问远程线程?

时间:2010-07-05 12:30:03

标签: c# multithreading windows-services

首先,我要解释我正在尝试做什么,然后直接提出问题。基本上,在特定机器上运行Windows服务,我们称之为M1。此Windows服务使用线程运行一组任务(每个任务分区有1个线程)。我需要编写一个功能,让用户从应用程序的管理面板停止/挂起/重新启动分区。我的解决方案在于通过id / name访问这些线程。一旦我有了线程,我就可以对它进行正确的操作。这是正确的方法吗?

如果是,我们该怎么做?线程在M1中运行,我需要从远程计算机(位于同一网络区域)访问它们。它甚至可能吗?

谢谢。如果需要,请不要犹豫,要求更多解释。

4 个答案:

答案 0 :(得分:2)

直接控制线程管理到远程进程是解决此问题的危险方法。您可以设置一个线程来侦听要挂起的请求等,并代表请求者操作线程。但是这可能会导致无穷无尽的问题,因为您在挂起它时不知道线程处于什么状态。特别是,它可以保持锁定,或者处于数据库事务的中间。

如果任务是短暂的,那么每当完成当前的杂务时,让每个线程请求都可以从老板处理。要暂停一个分区,告诉老板(通过TCP,Web服务或其他)不要再给分区的线程工作,直到另行通知为止。

答案 1 :(得分:2)

我不认为这是正确的做法。 将服务中的接口更好地提供管理线程的功能。

答案 2 :(得分:1)

我会通过TCP或.NET远程处理与流程进行通信,并使用定义要执行的任务所需的参数。

然后,您将需要一个管理此请求的类,并与线程通信,告诉他们该做什么。

答案 3 :(得分:1)

我不会使用线程ID。线程名称是可能的,但我倾向于为每个任务提供一个名称并对其进行键入。

如果我正在解决此问题,我会在您的Windows服务上公开Window Communication Foundation (WCF)接口。然后,您的应用程序将通过该界面控制任务。

我会避免使用.NET Remoting。它会起作用,但是.NET Remoting has been superseded by WCF。来自MSDN文章:

  

WCF早些时候取代了几个   用于创建的Microsoft技术   分布式应用。最   原本应用程序   使用ASP.NET Web Services,.NET构建   远程处理,企业服务,   System.Messaging或WSE将改为   建立在WCF上。