首页 > 解决方案 > 货币汇率表显示错误符号

问题描述

我创建了一个名为“ETM”的程序。

这是用户界面: 在此处输入图像描述

该程序用于将有关当前货币汇率的数据发送到汇率表。表格图片: 在此处输入图像描述

这些表是一种打印机,可以通过本地网络使用打印服务器进行访问。使用该程序的公司在全国拥有大约 50 张桌子(有关打印服务器的信息:https ://www.tp-link.com/us/products/details/TL-PS110P.html )

该程序有两种模式:手动模式和自动模式。

1)手动模式允许用户在文本框中输入汇率,然后按“发送数据”按钮,输入的货币汇率将显示在所有表格上。

2) 自动模式每 20 秒从服务中获取货币汇率,如果汇率发生变化,则执行与手动模式相同的逻辑。

// Table object implementation
public class ExchangeTable : ITable {
    public string TableName { get; set; }
    public IPAddress IPAddress { get; set; }
    public int Port { get; set; }
    public IEnumerable<Currency> Currencies { get; set; }
    public string LogMessage { get; set; }
}    

// Currency object implemetation
public class Currency {
    public object CurrencyName { get; set; }
    public string BuyPrice { get; set; }
    public string SellPrice { get; set; }
}

当程序启动时,用户从 List Check Box 中检查表格,然后使用 MANUAL MODE-s “SEND DATA”按钮,或 AUTO MODE-s “START PROCESS”按钮执行操作。

// data sending logic
public virtual void SendDataToTable(ITable table) {
        if (table != null && table.Currencies != null) {
            using (TcpClient client = new TcpClient()) {
                try {
                    string dataToSend = GetPrintString(GetPrices(table));
                    client.Connect(table.IPAddress, table.Port);
                    if (client.Connected) {
                        byte[] buffer = Encoding.ASCII.GetBytes(dataToSend);
                        using (NetworkStream stream = client.GetStream()) {
                            stream.Write(buffer, 0, buffer.Length);
                        }

                        if (table is ExchangeTable)
                            ((ExchangeTable)table).LogMessage = "SUCCESS";
                    }
                }
                catch (Exception ex) {
                    if (table is ExchangeTable)
                        ((ExchangeTable)table).LogMessage = "FAILURE: " + ex.Message;
                }
            }
        }            
    }

在此之后一切正常。所有 50 个表格都显示正确的数据,但经过一段时间(大约 1 小时或更长时间)后,5 个表格(总是相同的表格)显示错误的符号,其余 45 个表格仍然显示正确的数据。所有这 50 张桌子都是一样的。我不知道为什么它只发生在 5 张桌子上而不是所有桌子上。你知道如何解决这个问题吗?:(

标签: c#tcpclient

解决方案


问题很可能出现在代码的另一部分,因为在您发布的代码中,该表只是一个已经预定义的参数,已经包含 CurrencyName 对象。尝试发布您为每个表定义 CurrencyName 的代码。

但是,我想知道为什么 CurrencyName 是一个对象而不是更具体的东西,比如字符串或枚举。在这种情况下,错误的符号错误可能会导致运行时错误,您会发现它更容易。


推荐阅读