在类和表单之间传递数据的最佳方法?

时间:2014-04-08 19:52:21

标签: c# .net winforms

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

我正在创建一个用于收集光谱信息的光谱收集服务MDI应用程序。在我的主要表单中,我有一个硬件控制类,它编排和控制PLC控件类和光谱收集类。光谱收集和plc类内部分别是运行并连续收集光谱仪和plc信息的线程。

此外,我正在创建应用程序,以便用户可以打开新的子表单并查看有关系统的所有信息。我正试图找出一种方法,可以从子表单中看到这个系统信息,因为它们会不断更新。

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

3 个答案:

答案 0 :(得分:0)

使用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);
        }
    }
}

答案 1 :(得分:0)

如果您受限于使用WinForms,我建议您使用Smart Client Software Factory,或者更好地使用WPF并使用Prism

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

答案 2 :(得分:0)

以下是目前在类之间传递信息的最简单方法。

#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