更有效地传递DataStruct(winforms)

时间:2016-11-10 05:05:24

标签: c# winforms

我有一个在表单上多次使用的DataStruct []。它是通过读取CSV文件创建的。该结构有5列#34;每列约100,000行

特别是,我有一堆ChangeEvents(轨道栏,文本框等),每个更改事件都在重新制作数据结构,但我觉得它会减慢变化(它们正在渲染图表,反应缓慢)

一旦我有了实际结构,我就不需要改变它,我只需要处理数据。我不知道如何只创建一次DataStruct [],然后将该结构传递给各种更改事件而不重建它

以下代码目前存在于我的所有更改事件中(为简洁起见而编辑):

string[] fileArray = File.ReadAllLines(tempfile);
DataStruct[] data = new DataStruct[fileArray.Length];

        for (int i = 0; i < fileArray.Length; i++)
        {
            List<string> dataList = fileArray[i].Split(',').ToList<string>();
            data[i].X = (Convert.ToSingle(dataList[0]));                                             
        }

我的困惑是:我有各种使用该结构的void()方法,并且很容易传入这些方法。但是我不理解如何进入变更事件,因为每次发生变化时处理程序都会刷新,我不知道在哪里调用传球。例如:

private void trackBar1_Scroll(object sender, EventArgs e)
    {            
        label282.Text = trackBar1.Value.ToString();
        chart17.Series[0].Points.Clear();
        VoltageChanger();
    }

如何在不重新执行结构的情况下调用此Scroll更改? VoltageChanger()使用struct来做一些事情,并根据trackbar值创建一个新的图形。

或者......我是在愚蠢地认为这里可能会有一个减速,而这只是图形呈现不会变得更好吗?

谢谢(编辑:我一直在阅读,但winforms默认值之外的事件处理对我来说是新的)

1 个答案:

答案 0 :(得分:0)

我建议你阅读变量范围here。对于您的示例,您需要读取一次信息并使其可以访问类中的所有方法。这就是模块级变量的作用。在下面的代码片段中,请注意DataStruct的声明在类定义中,而不是在任何单个方法中。这使变量对该类的方法可见。

public partial class Form1 : Form
{
    private DataStruct[] _data;  // <-- Module level variable

    public Form1()
    {
        InitializeComponent();
        LoadData();  
    }

    private void LoadData()
    {
        // Open file code omitted
        _data = new DataStruct[fileArray.Length];
        // Read data into file omitted
    }

    private void Method1()
    {
        // _data will be accessible here because it is a module-level variable
    }
}