0

我已经创建了一个 VS 应用程序,我已经在另一台计算机上安装了一个副本,并且我希望通过 LAN 将它们链接起来,这样如果settings它们被连接在一起,其他设置也将被保存。

例如这个设置

我在sttings中创建了一个新name的并将其命名为“AdminIn”并将其类型设置为它,integer并将其值设置为0scopeuser

    Dim AI As New My .MySettings

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    AI.AdminIn = AI.AdminIn + 1
Ai.SAve()

End Sub

现在如何在另一台计算机上的其他应用程序中也更新AI。

如何通过 LAN 连接并完成此操作?

4

1 回答 1

0

我发现这个链接提供了一些示例代码来修改应用程序范围的变量My.Settings可能很有用。我已经用一个带有计时器和标签的简单表单对其进行了测试,该标签向我显示了AdminIn设置的当前值,它似乎有效。My.Settings计时器通过检查重新加载的值来更新表单的每个实例上的标签。该变量需要在应用程序范围内,以便任何可能运行可执行文件的机器上的所有用户都可以访问。

http://www.codeproject.com/Articles/19211/Changing-application-scoped-settings-at-run-time

这是我汇总的表单代码,以使当前管理员计数保持最新。非常简单,但它似乎巧妙地完成了这项工作。

Public Class Form1

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        'Decrement the AdminIn count when the current instance of the form is closed.
        Me.tmrAdminCheck.Stop()
        ChangeMyAppScopedSetting((My.Settings.AdminIn - 1).ToString)
        'Reload the .exe.config file to synchronize the current AdminIn count.
        My.Settings.Reload()
        My.Settings.Save()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Increment the current AdminIn count when a new instance of the form is loaded
        ChangeMyAppScopedSetting((My.Settings.AdminIn + 1).ToString)
        'Reload the .exe.config file to synchronize the current AdminIn count.
        My.Settings.Reload()
        My.Settings.Save()

        Me.lblAdminsIn.Text = "Current Admins In: " & My.Settings.AdminIn.ToString
        'Start the timer to periodically check the AdminIn count from My.Settings
        Me.tmrAdminCheck.Enabled = True
        Me.tmrAdminCheck.Interval = 100
        Me.tmrAdminCheck.Start()
        Me.Refresh()
        Application.DoEvents()
    End Sub

    Private Sub tmrAdminCheck_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrAdminCheck.Tick
        'Reload the .exe.config file to synchronize the current AdminIn count.
        My.Settings.Reload()
        Me.lblAdminsIn.Text = "Current Admins In: " & My.Settings.AdminIn.ToString
        Me.Refresh()
        Application.DoEvents()
    End Sub
End Class

我用这种方法发现了一些东西,它们与其他人在评论中已经提到的内容有关:

  1. 应用程序的 .exe.config 文件必须位于可访问的位置(CodeProject 示例默认为应用程序的可执行目录)。当然,您可以将设置保存到另一个共享目录中的 INI 文件或其他配置文件中并完成类似的事情,但这种方法使用My.Settings.
  2. 您可能需要做一些额外的检查,以检查两个人试图同时进入的可能性。如果发生这种情况,配置文件仍将打开并锁定,并且AdminIn不会保存新值。CodeProject 示例没有任何异常处理,但您可以通过对 Sub 进行递归调用轻松地将此功能用于异常处理。

否则,这似乎是完成您所说的完全可行的方法。

于 2013-07-17T18:51:06.350 回答