处理来自Caller(C#)类库的异常

时间:2016-09-01 01:31:48

标签: c#-4.0 dll visual-studio-2015

我正在试图创建一个应用程序“套件”,它将使用相当多的共享代码,并且我正在尝试(重新)学习如何处理某些事情 - 如果这不是这样做的话,请告诉我。

我在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)更多了清理代码并使其成为用户证明。

1 个答案:

答案 0 :(得分:-1)

不应该做我在异步调用上尝试做的事情。 异步异常处理应该以不同方式完成。 Catch an exception thrown by an async method