for (i = 1; i <= num; i++)
{
窗体中控件显示语句1 for (int j = 1; j <= ntime; j++)
{
SetProgress1(ntime, ntime - j);
SetProgress2(ntime, j);
Thread.Sleep(500);
}
窗体中控件显示语句2
}
这是主线程中的代码,问题是上下两个窗体中控件显示的语句不起作用,控件中的值不能循环改变,只是开始的时候控件显示语句1的显示效果,然后是num轮的进度条改变(进度条用委托,显示正常),最后才是现实的控件显示语句2的显示效果。是什么原因啊?要实现上下两个控件显示语句的效果循环改变应该怎么控制线程呢?
解决方案 »
- 如何处理字符串到相同长度??? 类似word目录
- 有这样一个动态库函数nt ReadCardNo(char * sCardNo,char * sPsamInfo,int nComPort),如何调用,请大家指点
- 刚学习Remoting,遇到了两个问题,请大家指点
- 如何获取用IE拖拽过来的内容???
- 上位机与PLC通信编程
- 用水晶报表时老是有个登陆框要用户输入密码等等,我的程序中已经知道,想禁止这个弹出框,怎么办?
- jmail 提取未读邮件的方法
- C#程序移植问题
- 是选择.net方向还是选java方向
- CNN:微软总裁比尔-盖茨在洛杉矶遭到暗杀死亡
- aspx打开word或者excel文件
- 如何判断指定的EXCEL文件已经打开,如果打开,如何保存关闭?
//form1.csprivate void button2_Click(object sender, EventArgs e) //开始执行按钮
{
progressBar1.Visible = true;
progressBar2.Visible = true; Pcb pcb1 = new Pcb();
pcb1 = myPcb.head; int i, k;
for (i = 1; i <= num; i++) //num是进程个数
{
ntime = pcb1.needtime;
textBox5.Text = ntime.ToString();
textBox6.Text = ntime.ToString();
textBox7.Text = pcb1.prio.ToString();
textBox8.Text = pcb1.name; ////////////////////////////////////////////////////////////显示listview1
listView1.Items.Clear();
Pcb tempPcb = new Pcb();
tempPcb = pcb1.next; ListViewItem lvi; for (k = 0; k < num - i; k++)
{
lvi = new ListViewItem();
lvi.SubItems[0].Text = tempPcb.name;
lvi.SubItems.Add(tempPcb.cputime.ToString());
lvi.SubItems.Add(tempPcb.needtime.ToString());
lvi.SubItems.Add(tempPcb.prio.ToString());
lvi.SubItems.Add("W");
listView1.Items.Add(lvi); tempPcb = tempPcb.next;
}
///////////////////////////////////////////////////////////// for (int j = 1; j <= ntime; j++) //进度条显示,ntime为进程执行需要的时间片
{
SetProgress1(ntime, ntime - j);
SetProgress2(ntime, j);
Thread.Sleep(500); //每隔500毫秒进度条改变一次
}
//显示listview2
lvi = new ListViewItem();
lvi.SubItems[0].Text = pcb1.name;
lvi.SubItems.Add(pcb1.needtime.ToString());
lvi.SubItems.Add(pcb1.needtime.ToString());
lvi.SubItems.Add(pcb1.prio.ToString());
lvi.SubItems.Add("F");
listView2.Items.Add(lvi); pcb1 = pcb1.next;
}
} public delegate void dSetProgress(int total, int current); //改变进度条的委托方法 public void SetProgress1(int total, int current)
{
if (this.InvokeRequired)
{
try
{
this.Invoke(new dSetProgress(this.SetProgress1), new object[] { total, current });
}
catch
{ }
}
else
{
this.progressBar1.Maximum = total;
this.progressBar1.Value = current;
}
} public void SetProgress2(int total, int current)
{
if (this.InvokeRequired)
{
try
{
this.Invoke(new dSetProgress(this.SetProgress2), new object[] { total, current });
}
catch
{ }
}
else
{
this.progressBar2.Maximum = total;
this.progressBar2.Value = current;
}
}
以上是我按钮事件里的代码,我原来的目的是在listview1里显示当前就绪进程列表,listview2里显示当前完成进程列表,另一块由textbox和进度条组成显示当前正在运行的进程,根据进程需要的时间片控制进度条的显示,显示完后一个进程运行完毕,更新listview1和listview2的内容,取下一个进程运行。
现在的问题是程序运行后listview1显示当前所有进程信息,然后进度条一直在走,一直到所有进程运行完后,listview2和textbox中才显示出运行完后应该显示的信息。为什么中间过程中listview1和listview2都不变呢?textbox中也不显示内容,应该怎么做啊?