【问题标题】:GUI + Thread, GUI exits Thread stays -> How to detect thread when GUI starts again?GUI + 线程,GUI 退出 线程停留 -> GUI 再次启动时如何检测线程?
【发布时间】:2011-03-28 22:57:33
【问题描述】:

我对 C# 还很陌生,所以请多多包涵。我正在开发一个小型服务器应用程序,它由事件驱动的服务器线程和一个 GUI 线程组成​​。我想让 GUI 和服务器“独立”(不使用两个进程)。独立我的意思是一旦 GUI 启动它检查服务器线程是否正在运行,如果不是它创建它,否则只是通知服务器线程 GUI 线程处于活动状态。并且那个 GUI 线程可以退出并使服务器线程保持活动状态。

伪代码:

GUI starts
{
if (serverThread.isRunning)
  notify serverThread that GUI is active
else
   create and start serverThread
}

GUI exits
{ notify serverThread that GUI is going to be terminated; exit GUI }

棘手的部分是如何重新启动 GUI 并通知服务器 GUI 处于活动状态。

现在我要做的就是:启动 GUI 并在 GUI 内部创建线程 serverThread 并启动它。离开 GUI 后 serverThread 仍然处于活动状态,但是当 GUI 再次启动时,我不知道如何获取对 serverThread 的引用。

通过单击图标启动 GUI。

感谢您的时间和回答。

【问题讨论】:

  • 这里使用两个进程是最自然的解决方案,从长远来看,它会让您的事情变得更容易。你为什么不想这样做?
  • 因为我认为这会让沟通和更新 GUI 更成问题。

标签: c# multithreading


【解决方案1】:

我永远不想自己使用这样的服务器。将 GUI 和服务器逻辑合二为一总是坏主意。从设计和用户的角度来看。

在您的情况下,我建议创建两个单独的可执行文件。首先是服务器和第二个 GUI。服务器可能是 Windows 服务。对于两者之间的通信,WCF 将是完美的。它允许您在每一侧无缝创建通信通道,而无需任何开发人员开销。

我理解您对将两者分开的担忧。但是,如果您是更好、更有经验的开发人员(也可能是管理员),那么您就会明白将两者分开不仅合乎逻辑,而且是切实解决您的问题的唯一方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2010-11-01
    • 2015-01-10
    • 2014-02-23
    • 2023-04-04
    相关资源
    最近更新 更多