Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用BackgroundWorker使用FileSystemWatcher更新主窗体UI?_Vb.net_Winforms - Fatal编程技术网

Vb.net 使用BackgroundWorker使用FileSystemWatcher更新主窗体UI?

Vb.net 使用BackgroundWorker使用FileSystemWatcher更新主窗体UI?,vb.net,winforms,Vb.net,Winforms,我在尝试使用BackgroundWorker更新我的主窗体UI以响应被触发的FileSystemWatcher事件时遇到了一些麻烦 FileSystemWatcher检查要添加到特定文件夹的映像,激发OnCreated处理程序 OnCreated处理程序调用RunWorkerAsync(e.FullPath)将文件名传递给后台工作程序 后台工作程序RunWorkerAsync获取文件路径,并将该项添加到(产品)列表中 列表(产品)添加到主UI上的ListBox控件中 我的第一个问题是在后台工作程

我在尝试使用BackgroundWorker更新我的主窗体UI以响应被触发的FileSystemWatcher事件时遇到了一些麻烦

  • FileSystemWatcher检查要添加到特定文件夹的映像,激发OnCreated处理程序
  • OnCreated处理程序调用RunWorkerAsync(e.FullPath)将文件名传递给后台工作程序
  • 后台工作程序RunWorkerAsync获取文件路径,并将该项添加到(产品)列表中
  • 列表(产品)添加到主UI上的ListBox控件中
  • 我的第一个问题是在后台工作程序完成后更新主UI线程。我在后台工作程序中处理图像,因为从图像生成缩略图需要几秒钟的时间,并且不想锁定UI

    我遇到的第二个问题是,在我的事件第二次触发之后,后台工作人员正忙时抛出异常

    Private HoldingTank As New List(Of Product)
    
    Private Sub LoadImages()
        Me.ToolStripStatusLabelUpdate.Text = "Images Loading - Please Wait...."
        CheckedListBoxView.Items.Clear()
        HoldingTank = Me.CreateImageList()
        For Each product As Product In HoldingTank
            Me.CheckedListBoxView.Items.Add(New ListViewDataItem With {.Image = product.Image, .ImageAlignment = ContentAlignment.MiddleCenter, .Tag = product})
        Next
        Me.ToolStripStatusLabelUpdate.Text = "Ready"
    End Sub
    
    Public Sub WatchFolders()
        watcher.Path = PathImport
        watcher.Filter = "*.tif"
        AddHandler watcher.Created, AddressOf OnCreated
        watcher.EnableRaisingEvents = True
    End Sub
    
     Sub OnCreated(sender As Object, e As IO.FileSystemEventArgs)
        BackgroundWorker1.RunWorkerAsync(e.FullPath)
     End Sub
    
     Private Sub BackgroundWorker1_LoadImages(ByVal sender As Object, ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
         HoldingTank.Add(New Product() With {.FileName = path.getFileName(e.argument), .FileExtension = path.GetExtension(e.argument), .FileFullPath = e.argument, .Image = GenerateThumbnail(e.argument)})
         '// Function GenerateThumbnail returns an Image object
    End Sub
    
  • BackgroundWorker将项目添加到列表中后,如何更新CheckedListBoxView控件而不获得非法的跨线程调用
  • 如果在工作进程完成之前引发另一个文件事件,我如何检查该工作进程是否正忙

  • 首先,确保您已经设置了
    FileSystemwatcher
    SynchronizingObject
    属性。如果没有,它将在次线程上引发其事件,在本例中您不希望这样做。您应该将表单指定给该属性

    其次,在
    DoWork
    事件处理程序中,您不需要触摸UI或从中调用的任何方法。这都是在辅助线程上执行的,除了UI线程之外,您不能在任何线程上修改UI。您可以在
    DoWork
    事件处理程序中完成所有可以完成的工作,然后将结果数据分配给
    e.Result
    属性

    然后处理在UI线程上执行的
    RunWorkerCompleted
    事件,从
    e.Result
    属性获取数据,然后更新UI。我不知道您在那里使用的是什么控件,但是您应该能够在辅助线程上创建项,但是您需要将它们添加到UI线程上的控件中


    您可以找到我自己的
    BackgroundWorker
    示例。

    首先,请确保已设置
    FileSystemwatcher
    SynchronizingObject
    属性。如果没有,它将在次线程上引发其事件,在本例中您不希望这样做。您应该将表单指定给该属性

    其次,在
    DoWork
    事件处理程序中,您不需要触摸UI或从中调用的任何方法。这都是在辅助线程上执行的,除了UI线程之外,您不能在任何线程上修改UI。您可以在
    DoWork
    事件处理程序中完成所有可以完成的工作,然后将结果数据分配给
    e.Result
    属性

    然后处理在UI线程上执行的
    RunWorkerCompleted
    事件,从
    e.Result
    属性获取数据,然后更新UI。我不知道您在那里使用的是什么控件,但是您应该能够在辅助线程上创建项,但是您需要将它们添加到UI线程上的控件中


    您可以找到我自己的
    BackgroundWorker
    示例。

    您明确提出了两个不同的问题,这显然违反了规则。如果您有两个问题,请创建两个问题。除非一个人同时回答两个问题,否则你很难接受两个问题的单一答案。请遵守规则。第二个问题似乎没有任何意义。你明确提出了两个不同的问题,这显然违反了规则。如果您有两个问题,请创建两个问题。除非一个人同时回答两个问题,否则你很难接受两个问题的单一答案。请遵循规则。第二个问题似乎没有任何意义。错误消息为
    PHP的VbForums用户警告:fetch_template()调用应替换为vB_template类。模板名称:bbcode_突出显示在..../includes/functions.php第4197行
    。这显示了对论坛所涉及的技术的信心:)@AndrewMorton,他们有一个自定义的vBulletin加载项,为每次升级站点软件时都需要手动注意的代码片段提供语法高亮显示,而最新的vBulletin更新由于某些不兼容而导致了这一点。网站管理员一再将这个问题推到最高层,但网站所有者似乎不愿意解决它。除了帖子中带有
    highlight
    标记的页面显示这些错误,并且包含这些标记的帖子尝试提交两次之外,其他一切似乎都运行得很好。错误消息为
    PHP的VbForums用户警告:fetch_template()调用应替换为vB_template类。模板名称:bbcode_突出显示在..../includes/functions.php第4197行
    。这显示了对论坛所涉及的技术的信心:)@AndrewMorton,他们有一个自定义的vBulletin加载项,为每次升级站点软件时都需要手动注意的代码片段提供语法高亮显示,而最新的vBulletin更新由于某些不兼容而导致了这一点。网站管理员一再将这个问题推到最高层,但网站所有者似乎不愿意解决它。除了帖子中带有
    突出显示
    标记的页面显示这些错误,以及包含这些标记的帖子尝试提交两次之外,其他一切似乎都很好。