我正在C#上创建一个进程调度计算器,我创建了listviews 1用于输入,一个用于调度本身,但是当我开始编码FCFS调度部分时,我无法将突发时间子项转换为double,所以我可以在这里添加等待时间是代码的一些部分和表单的截图
public void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "")
{
MessageBox.Show("Insert the required in the boxes");
}
else
{
ListViewItem Process = new ListViewItem(textBox1.Text);
Process.SubItems.Add(textBox2.Text);
Process.SubItems.Add(textBox3.Text);
Process.SubItems.Add(textBox4.Text);
listView1.Items.Add(Process);
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
double temp = 0;
//First Come First Served
if (comboBox1.Text == "FCFS")
{
for (int i = 0; i < listView1.Items.Count; i++)
{
ListViewItem WaitingTime = new ListViewItem(listView1.Items[i].Text);
//temp = Convert.ToDouble(listView2.Items[i].SubItems[0]) + Convert.ToDouble(listView2.Items[i + 1].SubItems[0]);
if (listView2.Items.Contains(WaitingTime))
{
WaitingTime.SubItems.Add(temp.ToString());
listView2.Items.Add(WaitingTime);
}
else
{
WaitingTime.SubItems.Add(temp.ToString());
listView2.Items.Add(WaitingTime);
}
}
}
//SJF Non-preemptive
if (comboBox1.Text == "SJF non-preemptive")
{
for (int i = 0; i < listView1.Items.Count; i++)
{
listView2.Items.Add(listView1.Items[i].Text);
}
}
}
我尝试了几次并搜索了几种形式,我得到的只是FormatExpection。
答案 0 :(得分:1)
Subitems [0]将保存第一个子元素,它与项目的Text相同,也不能将ListViewItem.Subitem转换为文本,需要使用Text属性。
所以你需要使用:
listView2.Items[i].SubItems[1].Text
在你的转换中,我也建议使用Double.TryParse而不是Convert.ToDouble,它会更快,并会告诉你它是否被解析。