线程或线程池中的不同实例
本文关键字:线程 实例 | 更新日期: 2023-09-27 18:13:56
我目前有一个启动中央逻辑类的项目(它使用其他一些.dll来检查硬件或连接到数据库)。之后,将启动一个WPF表单。此表单使用中心逻辑的信息。
当前,应用程序正在像这样启动:
public void StartTheWholeBunch()
{
Thread thread = new Thread(() =>
{
applicationLogic = new ApplicationLogic();
Application app = new Application();
app.Run(new MainWindow(applicationLogic));
});
thread.IsBackground = true;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
主窗口是我想使用的两个WPF应用程序之一。因此,第二个人将加入到后面阶段的乐趣中。
当前设置正在工作。所有东西都能相互沟通,没有问题。我想知道这个Thread
的使用是否正确。当我把applicationLogic = new ApplicationLogic();
留在线程之外时,事情必然会出错(例如,创建MessageBox弹出窗口时,整个应用程序将冻结在这里)。
我应该把所有东西都放在一个线程里吗?或者把所有东西分开和/或创建一个线程池是更好的做法吗?我怎样才能达到最好的效果呢?
applicationLogic应该无限期运行
我认为你混合了全局存在的类实例和线程的需要。你不需要一个单独的线程,你只需要ApplicationLogic
是一个单例。
public class ApplicationLogic
{
private static ApplicationLogic _instance = new ApplicationLogic();
public static ApplicationLogic Instance { get { return _instance; } }
private ApplicationLogic() { }
}
此外,通过立即执行thread.Join();
,您使Thread
成为一个没有意义的点。你不需要这个线程,只需要启动主表单。如果你想加载另一个表单,只需创建一个新实例并显示它:
var otherForm = new OtherForm();
otherForm.Show();
现在我们把ApplicationLogic
变成了Singleton
,就像你在另一个线程中做的那样,你可以这样访问它:
ApplicationLogic.Instance.DoSomething();