举个例子:
界面上有一个 Panel,
用一个 System.Timers.Timer 相隔 2秒 开一个线程,线程处理的就是 New 一个ProgressBar() 添加到Panel里面。线程里要处理的代码如下:
void ProcessWork()
{ ProgressBar bar = new ProgressBar();
panel1.Controls.Add(bar);
bar.Dock = DockStyle.Top;
bar.Maximum = 1000000; for (int i = 1; i <= 1000000; i++)
{
bar.Value = i;
}
}
计时器不断相隔2秒开一个线程出来,但点样做到当前正在处理的线程没处理完成,其他线程在排队等待呢?而且不能让界面卡死...请高手们详细指教指教啊~~~~!!!!!
界面上有一个 Panel,
用一个 System.Timers.Timer 相隔 2秒 开一个线程,线程处理的就是 New 一个ProgressBar() 添加到Panel里面。线程里要处理的代码如下:
void ProcessWork()
{ ProgressBar bar = new ProgressBar();
panel1.Controls.Add(bar);
bar.Dock = DockStyle.Top;
bar.Maximum = 1000000; for (int i = 1; i <= 1000000; i++)
{
bar.Value = i;
}
}
计时器不断相隔2秒开一个线程出来,但点样做到当前正在处理的线程没处理完成,其他线程在排队等待呢?而且不能让界面卡死...请高手们详细指教指教啊~~~~!!!!!
前者是通过调用Windows的WaitableTimer实现的,后者是.NET的简单的Thread.Sleep实现。两个实现都是用了.NET线程池(ThreadPool),所以Elapsed事件会在ThreadPool里选择一个线程执行。好处是如果前一次Elapsed没有完成,后一次的可以从ThreadPool里选一个新的线程开始执行
多线程操作一个progreessbar
其实这样做就是想为了模拟多线程操作主界面啊``但是要有顺序的操作,也就是当前线程没操作完成,其他线程需要等待,我试过用 Monitor.Wait(),但好像不行``而且会卡死界面``可能是我不会用望指点
void Statr()
{
timer= new System.Timers.Timer(1000);
timer.AutoReset = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Thread thread = new Thread(ProcessWork);
thread.Start();
} void ControlAdd()
{ ProgressBar bar = new ProgressBar();
panel1.Controls.Add(bar);
bar.Dock = DockStyle.Top;
bar.Maximum = 1000000; for (int i = 1; i <= 1000000; i++)
{
bar.Value = i;
}
}
for(int i = 1; i <= 100000;i++)
bar.Invoke(this.delegateBar , new object[] { i});