我有一个在表单上多次使用的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默认值之外的事件处理对我来说是新的)
答案 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
}
}