VB.net MySQL连接检查不工作/慢

时间:2013-10-17 06:26:56

标签: mysql vb.net user-interface

我有一个程序,其主要功能是每隔x个时间从MySQL数据库中提取数据并相应地调整GUI。

我有一个两部分问题,第一件事就是我的GUI在后台加载速度非常慢,同时正在尝试连接,你可以逐字逐句地看到每个标签/盒子/图像加载到MySQL检查完成。

粗略的解决方法是在功能之前添加me.Hide(),然后在显示检查结果后重新显示。你能看一下代码吗?是否将MySQL检查添加到函数中,然后在Form1_Load help上调用它?

第二部分是我的MySQL连接检查器似乎不起作用,现在我的主机正在接受远程MySQL会话,它似乎考虑连接一段时间...这是一个很好的6/7秒在出现连接错误消息之前。

我几乎跟着指南并自己编写代码,我理解每个部分,但我想也许我的ConnectionString无效。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        MaximizeBox = False

        Dim conn As MySqlConnection

        conn = New MySqlConnection
        conn.ConnectionString = "Server=50.28.x.x; Port=3306; User id=xxx_admin; password=xxxx; Database=xxx_software; Connect Timeout=60;"

        Try
            conn.Open()

        Catch myerror As MySqlException
            MsgBox("There was an error connecting to the MySQL Database")
            Label42.ForeColor = Color.Red
            Label42.Text = "ERROR"
            Timer1.Stop()
        End Try

        Timer1.Start()
        Label37.Text = Now.ToShortTimeString()

    End Sub

1 个答案:

答案 0 :(得分:1)

.Connect()是一个阻止调用,因此您不应将其放入处理Load事件的子中。例如,将它放入Activated并检查它是否已运行。您可能还想查看自VS2012以来正式可用的async / await。虽然将Load放入任何可能导致异常的内容仍然不是一个好主意,因为在这个阶段的异常处理存在问题,这个问题发生在运行32位版本代码的64位机器上(为了保持简单)

基本思想是保持UI-Thread(处理重新绘制表单等)免于“繁重”工作,这意味着在使用某种“线程”时将获得最佳结果。 async / await是一种非常简单的方法,因为它可以保持通常的程序流程。

Public Class Form1

Private InitDone As Boolean = False

Private Async Sub Form1_Activated(sender As Object, e As EventArgs) Handles Me.Activated

    If Not InitDone Then
        InitDone = True
        ' simulate some blocking call
        Await Task.Run(Sub() Threading.Thread.Sleep(10000))
        Me.Text = "Ready to go"
    End If

End Sub

结束班

Async是一个装饰器,只是“允许”你在方法中使用await关键字。这是必需的,因为等待是/不是C#中的保留字,否则它可能会破坏旧代码。 Await意味着在任务被调度之后,UI线程将继续并且可以重绘,处理事件等。当内部方法完成时(通常在其自己的线程中),UI线程“跳转”到直接在Await之后的行并执行该代码。很好的方法可以让您的应用程序保持响应并保持(看似)线性流程。

当然还有更多关于async / await的内容,你可能需要投入一些时间来适应它,但我猜它值得任何一分钟投入!