我正在试图创建一个应用程序“套件”,它将使用相当多的共享代码,并且我正在尝试(重新)学习如何处理某些事情 - 如果这不是这样做的话,请告诉我。
我在VS2015中有一个解决方案,其中包括4个,可能是5个项目。 2个不同但相似的客户端应用程序,一个服务器应用程序(仍然需要解决这个问题)和一个共享库(我可能会添加另一个)。
现在我有我的代码连接到我的库中的客户端。 我的WinForm应用程序调用此代码“工作”(我需要仍然开发服务器应用程序,但它正在尝试连接)。但是,我希望捕获并处理DLL抛出的异常,并提供一个很好的错误,以告知用户出现了什么问题。
ClientConnect.cs
public class ClientConnection
{
public void ConnectToServer(IPEndPoint ip, string type, string name)
{
clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ipEndPoint = ip;
strName = name;
strTypeOfCLient = type;
clientSock.BeginConnect(ip, new AsyncCallback(LoginToServer), clientSock);
}
public void LoginToServer(IAsyncResult AR)
{
try
{
clientSock.EndConnect(AR); // This statement is where it goes wrong.
}
catch (Exception)
{
throw;
}
}
}
CarbonCats_Main.cs(在名为Carbon Cats的项目中
public class CarbonCats_Main
{
private static ClientConnection clientcon;
private void btnConnect_Click(object sender, EventArgs e)
{
//placeholder for making the connection to "Mother Base"
int port = Int32.Parse(txtPort.Text);
System.Net.IPAddress ipA = System.Net.IPAddress.Parse(txtServer.Text);
System.Net.IPEndPoint ipE = new System.Net.IPEndPoint(ipA,port);
try
{
clientcon.ConnectToServer(ipE, "Cat", txtName.Text);
}
catch (Exception ex)
{
MessageBox.Show("An error occurred! are you sure the server is online? \n" +
"Here is more information: \n" + ex.Message, "Carbon Cats", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error);
}
}
}
我已经尝试了不同的方法来捕获错误 - 在两者周围包装一个try-catch,使我的lib静态,实例化它,......但它总是让我失望。
我如何实际处理抛出的异常(在这种情况下,它总是SocketException
,因为它还无法找到服务器。但是我得到的Exception(Types)
更多了清理代码并使其成为用户证明。
答案 0 :(得分:-1)
不应该做我在异步调用上尝试做的事情。 异步异常处理应该以不同方式完成。 Catch an exception thrown by an async method