Таблицы курсов валют показывают неправильные символы - PullRequest
0 голосов
/ 06 января 2019

Я создал программу под названием «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) АВТОМАТИЧЕСКИЙ РЕЖИМ получает курсы валют от службы каждые 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; }
}

Когда программа запускается, пользователь проверяет таблицы из флажка списка, затем использует кнопку «SEND DATA» в ручном режиме или кнопку «START PROCESS» в режиме AUTO MODE. выполнить операцию.

// 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 голосов
/ 06 января 2019

Проблема возникает в другой части вашего кода, скорее всего, так как в опубликованном коде таблица является просто предопределенным аргументом, уже содержащим объект CurrencyName. Попробуйте опубликовать код, в котором вы определяете CurrencyName для каждой таблицы.

Однако мне интересно, почему CurrencyName является объектом, а не чем-то более конкретным, например, строкой или перечислением. В таком случае неправильная ошибка символа, вероятно, приведет к ошибке времени выполнения, которую вы можете найти проще.

...