Показать сообщение отдельно
Старый 01.03.2015, 11:54   #2
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Асинхронная очередь

Неправильный подход у тебя.

Тебе нужна очередь в которую сообщение будет при отправке добавляться, и отдельный асинхронный воркер который будет забирать из очереди и отправлять.

И отдельный асинхронный воркер, проще всего в отдельном потоке запилить.



ConcurrentQueue


Где-то в коде:
private void Initialize() {
	this._queue = new ConcurrentQueue<NetMessage>();

	var asyncWorker = new Thread(SomeWorker);
	asyncWorker.Start();
}
public void Send(NetMessage msg) {
	if (msg.sended) throw new InvalidOperationException("Message already sended!");

	msg.sended = true;

	this._queue.Enqueue(msg);
}
private void SomeWorker() {
	while (true) {
		NetMessage msg;
		while (!this._queue.TryDequeue(out msg)) {
			
		}

                NetworkStream.Write(nextMessage.data, 0, nextMessage.Size + NetMessage.HeaderSize);
	}
}
Кстати, какая у тебя целевая платформа ? Если .NET 4.5, то советую вместо BeginWrite/EndWrite использовать await WriteAsync.
__________________

Последний раз редактировалось h1dd3n, 01.03.2015 в 13:03.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pax (01.03.2015)