【问题标题】:Looping Until A File Exists循环直到文件存在
【发布时间】:2012-09-11 17:17:24
【问题描述】:

好的,以下代码显示了我如何在文本框中输入值、将该值添加到列表框、更新其旁边的图片框并将文本框清空,以便用户可以向列表框添加其他值。

    ListBox1.Items.Add(TextBoxTicketID.Text)

    If CStr(ListBox1.Items(0)) = TextBoxTicketID.Text Then
        PictureBoxStatus1.Image = My.Resources.Orange_Information
    End If

    TextBoxTicketID.Text = ""

这里没有显示另一个过程,它将根据输入到列表框中的值创建 PDF。

我在循环检查 PDF 是否存在时遇到问题。当 PDF 存在时,我会将图片框更改为另一个图像。

这是我使用的循环,但我遇到的问题是用户无法输入第二个值,除非第一个值存在。

Loop Until My.Computer.FileSystem.FileExists("c:\Temp\" + ListBox1.Items(0) + ".pdf")
PictureBoxStatus1.Image = My.Resources.Green_Checkmark

所以理论上,我需要能够在列表框中输入 X 数量的值并继续检查文件是否存在,如果存在,则更改所需的图像。

编辑

这就是我最终做的...不过似乎工作正常...

    ListBox1.Items.Add(TextBoxTicketID.Text)

    If CStr(ListBox1.Items(0)) = TextBoxTicketID.Text Then
        PictureBoxStatus1.Image = My.Resources.Orange_Information
    End If

    TextBoxTicketID.Text = ""
    Call CheckFiles()

添加了一个公共子

    Public Sub CheckSpooling()
    Dim Watcher As New FileSystemWatcher()
    Watcher.Path = "C:\Temp\"
    Watcher.Filter = ListBox1.Items(0) + ".pdf"

    AddHandler Watcher.Created, AddressOf OnChanged

    Watcher.EnableRaisingEvents = True
    End Sub

然后,如果添加了文件,则 sub 将运行所需的任何内容。我使用了一个 msgbox 进行测试。

    Private Shared Sub OnChanged(source As Object, e As FileSystemEventArgs)
    ' Specify what is done when a file is created.
    MsgBox("File has been created!")
    End Sub

【问题讨论】:

标签: vb.net visual-studio-2010 loops


【解决方案1】:

【讨论】:

  • 如果我有其他问题需要补充您建议的答案,我应该提交一个新问题吗?我不想让我的原始帖子更长......或者只是添加一个额外的编辑部分?
  • 我会开始一个新问题。如果详细信息相关,您的新问题可以包含指向该问题的链接。
【解决方案2】:

在您循环时用户无法输入任何内容的原因是WinForm 框架本质上是单线程的。 UI 中的所有内容都发生在同一个线程上,包括事件处理程序。因此,如果您在按钮单击事件处理程序中长时间处于循环中,那么 UI 将被锁定并且无响应,直到代码退出循环。解决这个问题的方法是启动一个新线程来执行任何需要完成的工作。该工作线程可能需要尽可能长的时间才能完成,并且不会干扰 UI 线程,因此 UI 保持响应。 BackgroundWorker 组件使这变得更容易,您可以将其放到表单设计器中的表单上。

但是,正如 Dan-o 所推荐的那样,FileSystemWatcher 可能是比创建自己的工作线程来不断检查文件是否存在更好的解决方案。它不仅避免了重新发明轮子,而且效率更高。它不会不断询问文件系统是否存在文件,它只是侦听来自文件系统的消息以了解何时发生更改。

【讨论】:

    猜你喜欢
    • 2015-08-23
    • 2015-03-10
    • 2013-12-09
    • 2019-04-09
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多