日期:2014-05-20  浏览次数:20923 次

高分问个关于多线程的问题!
以下是个多线程上传文件的代码,其中WaitHandle.WaitAll(events);这句需要在Main函数前把[STAThread]修改成[MTAThread],而在我的程序中使用了webBrowser控件,这个控件要求使用[STAThread]该如何解决这个冲突呢?小弟初来乍到,望请高手指教!
//多线程备份文件
                public   bool   mutiThreadUploadFile(string   fileName,string   SN)
                {
                        FileInfo   fi   =   new   FileInfo(fileName);
                        if   (fi.Exists)
                        {
                                button5.Enabled   =   false;//避免连续两次上传
                                //初始信号
                                ManualResetEvent[]   events   =   new   ManualResetEvent[5];
                                //分块——分成5块下载
                                int   nTotalBytes   =   (int)(fi.Length   /   5);
                                for   (int   i   =   0;   i   <   5;   i++)
                                {
                                        events[i]   =   new   ManualResetEvent(false);
                                        FileThread   thdSub   =   new   FileThread(
                                        i   *   nTotalBytes,
                        (fi.Length   -   i   *   nTotalBytes)   >   nTotalBytes   ?   nTotalBytes   :   (int)(fi.Length   -   i   *   nTotalBytes),
                                fi.FullName,SN);
                                        ThreadPool.QueueUserWorkItem(new   WaitCallback(thdSub.UploadFile),   events[i]);
                                }
                                //等待进程结束
                                WaitHandle.WaitAll(events);
                                //重置   button   状态
                                button5.Enabled   =   true;