首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

哪位好心的大哥帮小弟我解决一下多线程文件操作的有关问题,附代码

2012-01-02 
哪位好心的大哥帮我解决一下多线程文件操作的问题,附代码。privatevoidbnCopyFilesSecret_Click(objectsend

哪位好心的大哥帮我解决一下多线程文件操作的问题,附代码。
private   void   bnCopyFilesSecret_Click(object   sender,   EventArgs   e)
                {
                        DialogResult   drResult   =   fbdOpenFolder.ShowDialog();
                        if   (drResult   ==   DialogResult.OK)
                        {
                                foreach   (DataGridViewRow   dgvSelectedRow   in   dgvSecretResults.SelectedRows)
                                {
                                        alArrayPath.Add(dgvSelectedRow.Cells[2].Value);
                                        alArrayName.Add(dgvSelectedRow.Cells[1].Value);
                                }
                                Thread   tdThread   =   new   Thread(new   ThreadStart(fnCopyFiles));
                                tdThread.ApartmentState   =   ApartmentState.STA;
                                tdThread.Start();
                        }
                }

private   void   fnCopyFiles()
                {
                        fnCopyFilesExe(alArrayPath,   alArrayName);

                }
public   void   fnCopyFilesExe(ArrayList   alPath,   ArrayList   alName)
                {
                        MessageBox.Show(Convert.ToString(alPath.Count-1));
                        for   (int   i   =   0;   i   <   alPath.Count-1;   i++)
                        {
                                if   (File.Exists(alPath[i].ToString().Remove(0,   5)))
                                {
                                        try
                                        {
                                                File.Copy(alPath[i].ToString().Remove(0,   5),   fbdOpenFolder.SelectedPath   +   "\\ "   +   alName[i].ToString());


                                        }
                                        catch
                                        {
                                                //异常有待处理
                                        }
                                        fnSetLabelText( "正在复制: "   +   alName[i].ToString());

                                }
                        }
                        MessageBox.Show( "复制成功! ");

                }
                private   void   fnSetLabelText(string   szLabelTextShow)
                {
                        if   (this.lbProcessInfoSecret.InvokeRequired)
                        {
                                SetTextCallback   d   =   new   SetTextCallback(fnSetLabelText);
                                this.Invoke(d,   new   object[]   {   szLabelTextShow   });
                        }
                        else
                        {
                                lbProcessInfoSecret.Text   =   szLabelTextShow;
                        }
                }
                delegate   void   SetTextCallback(string   szLabelTextShow);
想实现的功能就是在DataGridView中选定多行后点击复制按钮,开启新线程,将文件保存到指定文件夹,同时通过invoke在UI层的Lable里显示正在复制。。。某某文件,运行代码报错:if   (File.Exists(alPath[i].ToString().Remove(0,   5)))这句未将对象引用到实例。不解,小弟初学C#,啥都不会,请高手指教。

[解决办法]
MessageBox.Show(Convert.ToString(alPath.Count-1));
去掉线程代码中的试一下
[解决办法]
if (File.Exists(alPath[i].ToString().Remove(0, 5)))这句未将对象引用到实例
-----------------------------------
对alPath[i]的问题,比较蹊跷,单步调试下看alPath[i]到底什么问题!
[解决办法]


但是MessageBox.Show(Convert.ToString(alPath.Count-1));这一条能正确读出记录条数500条啊。
____________________________________________________
你如果在alPath里边存放500个null ,也能读出记录条数500条.

热点排行