线程或线程池中的不同实例

本文关键字:线程 实例 | 更新日期: 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();