现在我要生成A,B,C,D四个文件,每个文件所需要的时间各不相同,我如何用进度条控制生成的速度,在4个文件都生成好的时候,进度条刚刚100%,是不是要用什么进程去监视啊

解决方案 »

  1.   

    MSDN查下"progressbar",LZ看看自己能不能解决~
      

  2.   

    你完成这个工作需要把生成文件的过程放到一个后台线程里面
    当文件生成时,修改进度条的value值。全部生成完成设value值等于最大值即可。
      

  3.   


    private void Process()
    { String d = "afdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hra" +
    "afdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hraafdfgtklghjoisglierhw 032u4-521u-2ut43p8ty3408y1284hra" +
    "ejrt093u40tu30tu0348r-234uy593y394=248390w01-1\\543utp5w9tpfg873429y7otw348934bfsdla;'g4t347892729387`!IOT083848U03503Y8ore809340yt038yt0837uyt043809oasdhf89430t54g45y745te5t34y69098-090=-/uik7i8675674564565457567fr982^&$GBOR*hr3248t6h^&t096th3lthpse90929085u348t6-54tds0s9-093429-5693e0gu9-394-t3-93i4-t6j-k5jidstoproptefsdijf,/{+++"; byte[] b = System.Text.Encoding.UTF8.GetBytes(d + d + d + d + d);
    int totalLength = b.Length; progressBar1.Maximum = totalLength*4; //运行4次,乘以四
    progressBar1.Value = 0; //第一个文件
    StreamWriter bw = new StreamWriter("D:\\aaa.txt");

    for (int i = 0; i < totalLength; i++)
    {
    bw.BaseStream.WriteByte(b[i]);
    progressBar1.PerformStep();
    }
    bw.Close();
    //第二个文件
    bw = new StreamWriter("D:\\bbb.txt"); for (int i = 0; i < totalLength; i++)
    {
    bw.BaseStream.WriteByte(b[i]);
    progressBar1.PerformStep();
    }
    bw.Close();
    //第三个文件
    bw = new StreamWriter("D:\\ccc.txt"); for (int i = 0; i < totalLength; i++)
    {
    bw.BaseStream.WriteByte(b[i]);
    progressBar1.PerformStep();
    }
    bw.Close();
    //第四个文件
    bw = new StreamWriter("D:\\ddd.txt"); for (int i = 0; i < totalLength; i++)
    {
    bw.BaseStream.WriteByte(b[i]);
    progressBar1.PerformStep();
    }
    bw.Close();
    }
    }根本用不到多线程. 
      

  4.   


            long totalFileSize = 0;
            int count = 0;
            private void button1_Click(object sender, EventArgs e)
            {
                List<string> list = new List<string>();
                list.Add("log.txt");
                list.Add("log2.txt");            foreach (string file in list)
                {
                    if (!File.Exists(file)) continue;
                    FileInfo info = new FileInfo(file);
                    totalFileSize += info.Length;
                }            progressBar1.Maximum = (int)totalFileSize;
                progressBar1.Minimum = 0;            Thread thread = new Thread(new ParameterizedThreadStart(Foo));
                thread.IsBackground = true;
                thread.Start(list);
            }        private void Foo(object state)
            {
                List<string> list = state as List<string>;
                if (list != null)
                {
                    foreach (string file in list)
                    {
                        if (!File.Exists(file)) continue;
                        StreamReader reader = new StreamReader(file);
                        while (reader.Peek() > -1)
                        {
                            MethodInvoker mi = delegate
                            {
                                count += Encoding.Default.GetByteCount(reader.ReadToEnd());
                                progressBar1.Value = count;
                            };
                            Invoke(mi);
                        }
                    }                if (progressBar1.Value == progressBar1.Maximum)
                    {
                        MessageBox.Show("OK, it's done...");
                    }
                }
            }
      

  5.   

    把四个文件的总长度取到,进度条的总长度就设成这个值。
    生成文件时,用byte数组写 ,一次写多少就把进度条的value+上多少。