gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:32:30 24 4
gpt4 key购买 nike

我正在尝试在两个应用程序之间共享数据:第一个应用程序连续从传感器获取数据,我需要做的就是在接收这些数据时将它们传输到另一个 (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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com