在类和窗体之间传递数据的最佳方式

本文关键字:数据 最佳 方式 窗体 之间 | 更新日期: 2023-09-27 17:57:32

以下是我正在进行的项目的一些背景信息:

我正在创建一个光谱收集服务MDI应用程序,用于收集光谱信息。在我的主窗体中,我有一个硬件控制类,它协调和控制一个PLC控制类和一个频谱收集类。在光谱采集和plc类内部是分别运行和连续采集光谱仪和plc信息的线程。

此外,我正在制作该应用程序,以便用户可以打开一个新的子窗体并查看有关系统的所有信息。我正试图找出一种方法,在不断更新的子窗体中查看此系统信息。

我对使用线程、计时器和/或事件有一些想法。

在类和窗体之间传递数据的最佳方式

以下是迄今为止在类之间传递信息的最简单方法。

#region Variables
private static bool bTest = false;
#endregion
#region Functions
public static bool getbTest()
{
    return bTest;
}
public static void setbTest(bool b)
{
    bTest = b;
}
#endregion

如果您必须使用WinForms,我建议您使用智能客户端软件工厂,或者最好使用WPF和Prism。

两者都有共享组件的概念。

使用Progress类根据某些后台操作的进度更新UI。UI可以创建对象,定义它计划如何使用数据更新UI,然后将其传递给非UI操作,该操作可以提供数据,而无需知道UI将如何更新。

如果您使用的是早期版本的.NET:,则可以使用以下类似的实现

public interface IProgress<T>
{
    void Report(T data);
}
public class Progress<T> : IProgress<T>
{
    SynchronizationContext context;
    public Progress()
    {
        context = SynchronizationContext.Current
            ?? new SynchronizationContext();
    }
    public Progress(Action<T> action)
        : this()
    {
        ProgressReported += action;
    }
    public event Action<T> ProgressReported;
    void IProgress<T>.Report(T data)
    {
        var action = ProgressReported;
        if (action != null)
        {
            context.Post(arg => action((T)arg), data);
        }
    }
}