货币汇率表显示错误符号

时间:2019-01-06 10:23:25

标签: c# tcpclient

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

用户界面如下: http://i67.tinypic.com/so3h21.jpg

此程序用于将有关当前货币汇率的数据发送到汇率表。 (表格图片:http://i66.tinypic.com/wjguaa.jpg

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

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

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

2)AUTO MODE每20秒就会从服务中获取货币汇率,并且如果汇率已更改,其逻辑与MANUAL MODE相同。

// 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; }
}

程序启动时,用户从“列表”复选框中检查表,然后使用MANUAL MODE的“ SEND DATA”按钮或AUTO MODE的“ 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个表上而不是在所有表上都发生这种情况。您有解决该问题的想法吗? :(

1 个答案:

答案 0 :(得分:0)

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

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