Я использую стороннюю библиотеку сокетов, хотя это несколько не имеет отношения к моему вопросу. Библиотека состоит из класса «Socket» с такими методами, как «ConnectAsync» и «WriteAsync». Управление возвращает сразу после вызова одного из этих методов, и класс сокета вызывает события для уведомления, когда операция завершена, например. «ConnectCompleted» и «WriteCompleted». Класс также вызывает событие при получении данных: «PacketArrived».C# как обернуть управляемый событиями код с обратными вызовами
В моем приложении я хочу отправить данные и дождаться ответа. Поскольку это может случиться во многих местах, имеет смысл обернуть вышеупомянутый класс сокетов каким-то помощником, который делает все это для меня. Я также хотел бы он быть асинхронным, так что интерфейс (WPF) не замерзает во время подключения/записи/ожидания ответа, поэтому вызов вспомогательного метода может выглядеть следующим образом: -
SocketHelper.SendData(dataToSend, myCallback);
Где " myCallback "вызывается, когда данные получены.
Будучи новичком в потоковом режиме, я не уверен, как писать этот помощник - как-то ему нужно объединить различные методы и события, т.е. открыть соединение, дождаться завершения соединения, записать данные, подождать для завершения записи, а затем дождаться поступления пакета данных (затем вызвать предоставленный обратный вызов). Любая помощь оценивается.
Начните читать праймер на событиях C# и делегатах http: //www.akadia.com/services/dotnet_delegates_and_events.html Я думаю, что обертка библиотеки может быть мостом слишком далеко, вам не нужно проходить обратные вызовы с помощью механизма событий .NET. –
Какая версия рамки? .NET 4 имеет параллельную библиотеку задач, чтобы помочь с такими проблемами –
@PanagiotisKanavos это .Net 4 –