【发布时间】:2016-10-05 23:17:45
【问题描述】:
我想在服务器上创建等待工作的线程。 我希望每个访问该站点的用户有 1 个线程。它可以使用 thead.sleep(100) 创建一个 while 循环,但这似乎效率不高。我们跟踪属于每个访问者的每个任务,以便我们可以访问他们的 winform 相关对象。
所以我们需要线程,因为我们已经在 winforms 中投入了很多年,而且很多代码都在表单代码隐藏中,因此我们必须为每个用户启动 MainForm 的一个实例,并在用户访问该站点时将其保存在内存中. html UI 非常愚蠢,只响应我们的套接字提供的信号(如打开消息框或小表单)。例如,对于消息框(是/否),服务器必须等待用户选择才能继续该过程。
最初的糟糕设计迫使我们采用这种有效且快速的方法。我只想用更好的东西(更容易/更快)替换等待循环。我们不能完全重做它,因为它需要额外花费 1 年的时间来开发
也许 rx.NET 可以提供帮助,但我不知道。
有一些相关的答案here,但并不明显。
谢谢
菲利克斯
【问题讨论】:
-
网站上的Winforms相关对象?每个用户一个线程?使用 Thread.Sleep 的繁忙循环?你到底想做什么,为什么你认为多线程是一个很好的解决方案?
-
如果您所做的只是等待某种 IO 的结果,您不想为此创建单独的线程,因为 .NET 框架已经有许多可用于非阻塞的机制我/O。
-
谢谢,我们需要线程,因为我们已经在 winforms 中投入了很多年,而且很多代码都在代码隐藏(没有 api)中,所以我们必须为每个用户启动一个主窗体的实例并保留它在用户访问该站点时在内存中。 html UI 非常愚蠢,只响应我们的套接字提供的信号(如打开消息框或小表单)。例如,对于消息框(是/否),服务器必须等待选择
-
我在我的问题中添加了更多信息。请重新打开:)
-
有一个很好的方法来解决这个问题(将业务逻辑与 UI 问题分开,然后在网站中重用此逻辑)并且......无论您尝试做什么。尝试在服务器上运行 Windows 窗体应用程序,因为您的逻辑与 UI 问题严重交织在一起是行不通的。