首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用将文件添加到我的ListView

使用将文件添加到我的ListView
EN

Stack Overflow用户
提问于 2012-12-25 19:37:24
回答 1查看 226关注 0票数 0

我想在我的应用程序中添加一个包含目录中所有文件的选项到我的ListView中,因为我在添加到我的ListView之前检查了每个文件(我的文件是Wiresahrk文件,所以我正在检查文件扩展名,如果不是pcap格式,我会转换文件然后添加),我想用单独的线程来完成,所以我使用BackgroundWorker,我需要一些如何做的帮助:

代码语言:javascript
复制
private void btnAddDir_Click(object sender, EventArgs e)
{
    ListViewItem lv = new ListViewItem();
    string fileToAdd = string.Empty;
    List<string> filesList = new List<string>();
    BackgroundWorker backgroundWorker = null;
    DialogResult dialog = folderBrowserDialog1.ShowDialog();
    if (dialog == DialogResult.OK)
    {
        Editcap editcap = new Editcap();

        foreach (string file in SafeFileEnumerator.EnumerateFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories))
        {
            if (editcap.isWiresharkFormat(file))
            {
                filesList.Add(file);
            }
        }

        backgroundWorker = new BackgroundWorker();
        backgroundWorker.WorkerReportsProgress = true;
        backgroundWorker.DoWork +=
            (s1, e1) =>
            {
                foreach (string fileName in filesList)
                {
                    if (editcap.isWiresharkFormat(fileName))
                    {
                        if (editcap.isLibpcapFormat(fileName))
                        {
                            lv.Text = fileName;
                            lv.SubItems.Add(fileName);
                            lv.SubItems.Add("Waiting");

                            this.Invoke((MethodInvoker)delegate
                            {
                                lvFiles.Items.Add(lv);
                            });

                            lvFiles.Refresh();
                        }
                    }
                }
            };

        backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
        (s1, e1) =>
        {

        });

        backgroundWorker.RunWorkerAsync();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2012-12-25 19:45:51

不是在backgroundWorker.ProgressChanged事件中添加项目,而是在DoWork中添加。

否则,您将得到错误Cross-thread operation not valid: Control ___ accessed from a thread other than the thread it was created on.

变化

代码语言:javascript
复制
backgroundWorker.ReportProgress(0, fileToAdd);

代码语言:javascript
复制
lv.SubItems.Add(fileToAdd);

而且,你不需要处理ProgressChangedRunWorkerCompleted事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14030284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档