【问题标题】:Logging Options with BackgroundWorker in VB.net在 VB.net 中使用 BackgroundWorker 的日志记录选项
【发布时间】:2010-01-10 22:51:46
【问题描述】:

我有一个 GUI 类和一个数据库类。我会这样做:

Dim db as Database = getDatabaseObject(logTxtBox)
db.executeNonQuery("some update command here")

在 executeNonQuery 中,我连接到数据库,执行命令,断开连接并捕获异常。 logTxtBox 是我想要写入日志消息的 GUI txt 框。目前它写的是这样的:

Connected to DB successfully
Executing "some update command here"
Excepetion: ........
Disconnecting from DB

我觉得这不是我的日志记录的最佳结构。一旦我使用 BackgroundWorker 而不是主 GUI 线程启动 executeNonQuery,我就无法从 BackgroundWorker 的线程访问 GUI 的 logTxtBox。

有没有更好的方法来实现这种功能?

谢谢-

乔纳森

【问题讨论】:

    标签: vb.net user-interface design-patterns


    【解决方案1】:

    要使用后台线程中的 UI 组件,请确保使用 Control.Invoke() 以确保代码在 UI 线程中运行。

    下面是一些在 UI 线程上调用方法并传入参数的 C# 代码:

        this.Invoke(new Action<string>(MyMethod), "something to log");
    
        private void MyMethod(string logData) {
            // set some text here
        }
    

    【讨论】:

      【解决方案2】:

      您可以在数据库类中引发事件并在 ui 中处理这些事件。例如,您可以创建自定义“StatusChanged”事件并在 eventargs 中传递当前状态。

      【讨论】:

        猜你喜欢
        • 2016-05-02
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 2019-04-24
        相关资源
        最近更新 更多