У меня есть две библиотеки классов. Одна - это обычная сборка .NET, а другая - сборка устройства Compact Framework, связывающая файлы классов рабочего стола. Эта библиотека отвечает за асинхронные операции TCP между сервером и клиентом.
Теперь я создаю проект Windows для сервера и проект устройства Windows Mobile Forms в качестве клиента.
Я использую некоторые события для данных, полученных для клиента и сервера. Для запуска данных, полученных из ASync, полученных через TCP safe, я использую фиктивный класс Control, чтобы проверить, требуется ли Invoke.
Странно то, что при отправке данных с сервера клиенту устройства CF данные не нуждаются в какой-либо обработке потоков для элементов управления, где вам нужно показывать данные.
Но при отправке данных с клиента на сервер я получаю исключение операции с несколькими потоками.
Вот код.
Статический метод, который я использую для защиты данных.
public static void InvokeIfNecessary(Control control, Action setValue)
{
if (control.InvokeRequired)
{
control.Invoke(setValue);
}
else
{
setValue();
}
}
Когда я хочу выбросить данные, полученные из TCP-соединения.
if (OnClientChangeConnection != null) SafeData.InvokeIfNecessary(_helpControl, () => OnClientChangeConnection(ConnectedClients, requestClientInfo));
Есть идеи, почему у меня такое поведение? Или лучше справиться с этой проблемой?
Спасибо!