0

我正在使用 Timer 控件,我想将间隔设置为等于 ListBox 中对象的 Proc_BurstTime。我不知道我该怎么做。

问题是,我在 ListBox 中有多个不同的对象;我想要做的是让程序遍历列表中每个对象的 Proc_BurstTime。

例如,我有一个 ProgressBar。ListBox 中有 5 个东西具有这些 Proc_BurstTime 值(以 ms 为单位): 5000 4000 1000 7000 2000 程序应该转到 ListBox 中的第一个对象,将进度条设置为“加载”X 秒(Proc_BurstTime)。第一个是5000毫秒(5秒),进度条会在5秒内从0到100,完成后会进入下一个,4000毫秒;依此类推。

我的问题是这样的:

timer1.Interval = initial_ProcessList.Items[0].Proc_BurstTime;

这是我得到的错误
*'object' does not contain a definition for 'Proc_BurstTime' 并且没有扩展方法 'Proc_BurstTime' 接受类型为 'object' 的第一个参数(您是否缺少 using 指令或程序集引用? )*

这是我的结构和初始化:

    struct process
    {
        public int Proc_Id;
        public int Proc_BurstTime;
        public int Proc_Priority;
        public override string ToString()
        {
            return "ID: " + Proc_Id.ToString() + " Time: " + Proc_BurstTime.ToString() + " Prior: " + Proc_Priority.ToString();
        }
    };

    readonly process[] ProcessList = new process[]
    {
        new process{ Proc_Id = 1, Proc_BurstTime = 5000, Proc_Priority = 1},
        new process{ Proc_Id = 2, Proc_BurstTime = 4000, Proc_Priority = 2},
        new process{ Proc_Id = 3, Proc_BurstTime = 1000, Proc_Priority = 3},
        new process{ Proc_Id = 4, Proc_BurstTime = 7000, Proc_Priority = 4},
        new process{ Proc_Id = 5, Proc_BurstTime = 2000, Proc_Priority = 5}
    };

这就是我向 ListBox 添加内容的方式:

private void Form1_Load(object sender, EventArgs e)
    {
        foreach (var p in ProcessList)
        {
            initial_ProcessList.Items.Add(p);
        }
    }
4

1 回答 1

2

您必须将其转换为适当的类型:

timer1.Interval = ((process)initial_ProcessList.Items[0]).Proc_BurstTime;

或者,如果您必须访问多个属性,您可能希望这样做:

process proc = (process)initial_ProcessList.Items[0];
timer1.Interval = proc.Proc_BurstTime;

请注意,如果您正在循环中的进程ListBox,您可以方便地在foreach-loop 的头部声明迭代器的类型:

foreach (process proc in initial_ProcessList.Items)
{
    timer1.Interval = proc.Proc_BurstTime;
    ...
}
于 2013-09-20T21:19:55.287 回答