Diskuze: Socket.BeginReceiveFrom a Thread
Zobrazeno 2 zpráv z 2.
Tak už som to konečne spravil.
Pre tých ktorý by chceli vedieť ako som to poriešil.
V novom .NET Frameworku 4.5 je nová featura a to:
SynchronizationContext.
(Čo mi nie moc vyhovuje ale budiź, na tento test to postačí)
Pri BeginReceiveFrom ako state(object)
pošlem SynchronizationContext.Current
(aj v AsyncCallbacku toto prepíšeme)
socket.BeginReceiveFrom(this.buffer, 0, this.buffer.Length, SocketFlags.None, ref epSender, new AsyncCallback(serverOnData), SynchronizationContext.Current);
Potom upravím onData metódu:
private void onData(object arguments)
{
object[] objs = arguments as object[];
if (objs.Length != 2)
return;
NetworkInstruction ni = objs[1] as NetworkInstruction;
EndPoint ep = objs[0] as EndPoint;
// ...
}
A v AsyncCallbacku to zavoláme takto:
// ...
// tu potrebujem dáta poslať späť do main threadu na ďalšie vykonávanie
SynchronizationContext sc = ar.AsyncState as SynchronizationContext;
sc.Post(onData, new object[] { epSender, ni });
// ...
Zobrazeno 2 zpráv z 2.