我目前正在开发一个包含两个项目的解决方案,一个控制台和一个表单应用程序。控制台应用程序是我的应用程序的主要入口点,用户可以从控制台运行表单应用程序。
问题是,当用户启动表单应用程序时,其他业务逻辑(来自控制台应用程序)将不会运行,直到表单关闭。我的第一个想法是为表单使用后台工作程序,但表单项目中的业务逻辑已经使用后台工作程序(我只有两个CPU ...)。也许这可能是我对多线程的无知,但有没有办法做到这一点?
非常感谢任何想法! 干杯
答案 0 :(得分:2)
嗯,这很不寻常。一般来说,为用户提供一个漂亮的GUI并且仍然保持控制台窗口和交互性是没有多大意义的。
但是,是的,调用Application.Run()或Form.ShowDialog()将阻止该线程。它必须,消息循环需要运行以保持GUI活着。如果这样做,请确保将[STAThread]属性放在Main()方法上。
另一个不错的选择是开始一个线程。这不是问题,UI线程不会刻录任何CPU周期。代码仅在用户执行某些操作时运行,否则在99%的时间内处于空闲状态。确保在启动之前调用线程的SetApartmentState()方法,需要STA。