c# - 在 C# 应用程序之间流式传输数据

标签 c# wpf sockets

我正在尝试在两个应用程序之间共享数据:第一个应用程序连续从传感器获取数据,我需要做的就是在接收这些数据时将它们传输到另一个 (WPF) 应用程序(并绘制一个图)。

数据通过事件处理程序接收,然后通过套接字传输,如下所示:

    static TcpClient client = new TcpClient("localhost", 8181);
    static double w, dba;

    static void Write()
    {
        try
        {
            Stream s = client.GetStream();
            StreamReader sr = new StreamReader(s);
            StreamWriter sw = new StreamWriter(s);
            sw.AutoFlush = true;
            while (true)
            {
                String line = "W:" + w + "DB/A:" + dba;
                sw.Write(line);
                Console.WriteLine(sr.ReadLine());
            }
            s.Close();
        }
        finally
        {
            client.Close();
        }
    }

问题是,我需要把它放在一个单独的线程中吗? (正如我尝试的那样,没有成功)因为这样,当 eventHandler 不断被触发并产生数据(将其存储到两个变量中)时,sw 似乎无法继续。

抱歉,如果问题有点含糊,这是我第一次尝试分布式应用程序,所以我也有点困惑。任何建议或帮助将不胜感激!

TIA

最佳答案

使用memory mapped files ,它允许您直接在应用程序之间共享内存。它将比大多数其他方法快得多。

查看名为非持久内存映射文件的部分,其中详细介绍了如何通过字符串名称共享一段内存。我在我用于调试的应用程序中使用它,它的速度足够快,我的 C# 应用程序可以实时读取我的 native 应用程序的内存。

如果您通过这种方法传输数据,请考虑一般情况下您将如何传输数据。确定轮询频率(比如每 100 毫秒)并让应用程序 A 将数据写入内存映射文件。然后让应用程序 B 读取该内存映射文件并将其存储在本地集合中。这是您的传输。

所以 A 基本上将相同的结构写入和重写到内存映射文件中,B 以给定的轮询速率读取它并将轮询的内容存储在一个集合中。

关于c# - 在 C# 应用程序之间流式传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19030842/

相关文章:

c# - 如何检查文件是否存在于 ASP.NET MVC 4 中

wpf - 您可以在 Style 或 ControlTemplate 中包含的 Storyboard 中使用 DynamicResource

c - 通过 TCP 套接字发送 C 结构体

java - 将字节写入 java 套接字

c# - 在Android中POST后从WCF返回JSON

c# - ViewModel 上的 MVC2 DataAnnotations - 不理解将它与 MVVM 模式一起使用

c# - 在 Visual Studio 2013 中生成单元测试报告

c# - 改进 WPF ListBox 多项目拖放

具有多窗口处理的 WPF + MVVM

node.js - 套接字 IO 网络::ERR_CONNECTION_REFUSED