Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass argument to AsyncCallback function?

I'm learning socket programming and I have the following function:

public void OnDataReceived(IAsyncResult asyn)

and this is how the callback gets set:

pfnWorkerCallBack = new AsyncCallback(OnDataReceived);

The problem is I need to pass another argument to OnDataReceived callback function, how can I do this? I'm trying to make a simple tcp server and I need to track from which client the data is coming from. Any tips? Thanks!

like image 496
user1192403 Avatar asked Feb 08 '12 11:02

user1192403


1 Answers

I'm going to presume you're using System.Net.Sockets.Socket here. If you look at the overloads of BeginReceive you'll see the object parameter (named state). You can pass an arbitrary value as this parameter and it will flow through to your AsyncCallback call back. You can then acess it using the AsyncState property of IAsyncResult object passed into your callback. Eg;

public void SomeMethod() {
  int myImportantVariable = 5;
  System.Net.Sockets.Socket s;
  s.BeginReceive(buffer, offset, size, SocketFlags.None, new new AsyncCallback(OnDataReceived), myImportantVariable);
}

private void OnDataReceived(IAsyncResult result) {
  Console.WriteLine("My Important Variable was: {0}", result.AsyncState); // Prints 5
}
like image 124
MrMDavidson Avatar answered Sep 18 '22 16:09

MrMDavidson