【问题标题】:How to set variable in second process from first process如何在第一个进程的第二个进程中设置变量
【发布时间】:2021-03-21 09:55:01
【问题描述】:

首先:我是这个论坛的新手,不是专业程序员,只是爱好。

这就是我所拥有的:VisualStudio 中的一个解决方案,VB.net 中有 3 个项目。 第一个项目包含常用功能等。 第二个项目是 Windows 服务。 第三个项目是 Windows 窗体 UI。

第二个第三个项目导入第一个项目。

我的问题:当第二个项目的服务正在运行并且第三个项目的 UI 启动时,我想设置一个变量(例如通过按下按钮),该变量也将在服务中设置。所以通知服务做一些特殊的事情。

我尝试在公共项目中声明这个变量,但这不起作用。经过一番搜索,我现在知道这行不通,因为服务和 UI 是单独的进程。

有几种解决方案可以在进程之间进行通信,例如IPC、共享内存、命名管道……

但是没有简单的方法可以解决我的问题吗?

非常感谢,并致以最诚挚的问候,

马蒂亚斯

【问题讨论】:

  • 明明也有文件和数据库,但是你想要一个直接的进程来处理通信?
  • 可能没有更简单的方法,但一个阴暗的解决方法是将变量写入文件并从第二个进程读取它。
  • @Steve:是的,有文件(.ini 文件)。但我不想从服务循环中读取这个文件。我想直接从 UI 告诉服务新值。
  • 是的,当然有一个简单的解决方案。但是没有人在互联网上谈论它,因为他们更喜欢人们使用困难的解决方案。我在开玩笑,当然。如果有一个简单的解决方案,那么这就是您在搜索时首先会找到的解决方案,因为这是每个人都会使用的解决方案。
  • 在配置发生变化时必须重新启动服务并不少见,所以我认为您的目标不一定是常见的或容易做到的。

标签: vb.net user-interface variables service


【解决方案1】:

好的,谢谢你的回答!! :-) 我决定尝试使用内存映射文件。

这是我的制作功能:

公共函数 MakeMemoryMappedFile(ByVal pValue As String) As String

    Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(pValue)

    Try
        Dim mmf As MemoryMappedFile = MemoryMappedFile.CreateOrOpen("test", 10000)
        Dim accessor As MemoryMappedViewAccessor = mmf.CreateViewAccessor()
        accessor.Write(54, CType(Buffer.Length, UShort))
        accessor.WriteArray(54 + 2, Buffer, 0, Buffer.Length)

        Return "ok"

    Catch ex As Exception

        Return "Error = " & ex.Message

    End Try

结束函数

这是我的阅读功能:

公共函数 ReadMemoryMappedFile() As String

    Try
        Dim mmf As MemoryMappedFile = MemoryMappedFile.OpenExisting("test")
        Dim accessor As MemoryMappedViewAccessor = mmf.CreateViewAccessor()
        Dim Size As UShort = accessor.ReadUInt16(54)
        Dim Buffer As Byte() = New Byte(Size - 1) {}
        accessor.ReadArray(54 + 2, Buffer, 0, Buffer.Length)
        Return ASCIIEncoding.ASCII.GetString(Buffer)

    Catch noFile As FileNotFoundException

        Return "No File found ..."

    Catch ex As Exception

        Return "Error = " & ex.Message

    End Try
End Function

我的应用程序上有一个用于设置值的按钮和一个用于读取值的按钮 -> 工作正常。

如果我启动此应用程序两次并在第一个实例中设置值,然后从第二个实例中读取值 -> 它工作正常。

但是:如果我在应用程序中设置值,我的 Windows 服务将无法读取 ist。总是得到一个“FileNotFoundException”。

你能告诉我有什么问题吗?!?

谢谢!!!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
相关资源
最近更新 更多