使用async / await从其他任务更新gui时出现问题

时间:2019-02-28 10:11:24

标签: vb.net multithreading async-await

我知道关于这个问题有很多问题,也有很多答案,但是我读了好几天,所以找不到解决我问题的方法。我还应该提到我是这方面的初学者。

首先,我想在文字上解释我的vb.net程序做什么:

  1. 使用按钮启动我的应用程序后,我在MainForm上启动状态监视文件的文件监视程序,并启动了一个用于计算测试数据的新线程。
  2. 此线程启动一个类,并且在该类中也启动一个文件监视程序。
  3. 在受监视的文件夹中创建testdata时,线程将分析我的数据并将其写入数据库。
  4. 在计算过程中,写入数据库后,任务会将一些状态消息写入状态消息文件。
  5. 状态消息的内容应显示在文本框内的MainForm上,并且在写入新状态时应始终更新,以便最新状态始终位于文本框的顶部。进度也必须报告给MainForm,以便用进度条显示。
  6. 只要我的文件夹中有新的testdata,就重复一次,换句话说,我的应用程序是一个“数据吸尘器”,它从受监视的目录中吸取所有数据,以便进行分析并将其写入数据库。如果分析了文件夹中的所有数据并将其写入数据库,它将等待新数据,并且在Filewatcher触发新事件后,任务将再次开始分析和写入。因此,当我有新数据时,我不会总是启动任务。仅当我启动我的应用程序时,任务才会启动。其余的工作由此任务中的filewatcher事件完成。

我无法执行此操作,因为无法从此线程修改GUI。我还要提到,该线程的代码在另一个类中。

这是我在主表单上的代码:

Private Async Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click

        Await Task.Run(Sub() gFileWatcher.InitWatcher())

    End Sub

状态更改后,如何实时刷新文本框?

0 个答案:

没有答案