我无法弄清楚为什么会这样。
我有一个正常的连接方法:
public void Connect()
{
_client.BeginConnect(new AsyncCallback(this.ConnectCallback), _client);
}
public void ConnectCallback(IAsyncResult asyncResult)
{
ServerClient callback = null;
callback = (ServerClient)asyncResult.AsyncState;
callback.EndConnect(asyncResult);
Program.IMMainForm.BeginInvoke(new frmMain.ConnectionEstablishedNotification(Program.IMMainForm.ConnectionEstablished));
这完全没问题。我几乎复制并粘贴了我的Send方法的代码:
public void Send(string code, string data)
{
_client.BeginSendToServer((code + data), new AsyncCallback(this.SendCallback), _client);
}
public void SendCallback(IAsyncResult asyncResult)
{
ServerClient callback = null;
callback = (ServerClient)asyncResult.AsyncState;
callback.EndConnect(asyncResult);
}
但是,EndConnect行出错,错误
“Async End使用来自不同Begin方法的IAsyncResult调用。 参数名称:结果“
说
mscorlib.dll中出现'System.ArgumentException'类型的第一次机会异常
我不是百分之百地处理异步的东西,所以有什么明显的我做错了吗?
答案 0 :(得分:8)
您应该致电EndSendToServer
,而不是EndConnect
。
生成的异步方法与Begin
和End
前缀配对;你用一种方法开始异步操作,然后用另一种方法结束。