不知道要设置哪个标题,因为我不完全知道问题所在。 我有一个工作c#
代码,我把它包装到dll
来分隔客户端与其他功能,但现在它不像预期的那样工作。它是通过udp
的客户端服务器。这里是我的代码:c# - DLL无法正常工作
HandlerFactory factory = new HandlerFactory();
factory.RegisterHandler(RequestType.Options,() => new OptionsHandler());
factory.RegisterHandler(RequestType.Unauthorized,() => new UnauthorizedHandler());
factory.RegisterHandler(RequestType.Ok,() => new OkHandler());
factory.RegisterHandler(RequestType.Invite,() => new InviteHandler());
factory.RegisterHandler(RequestType.Bye,() => new ByeHandler());
factory.RegisterHandler(RequestType.Error,() => new ErrorHandler());
Application.SetCompatibleTextRenderingDefault(false);
Client client = new Client(factory);
client.Start();
client.Register();
而在客户端:
private void Listen()
{
while (!_stopping)
{
try
{
var asyncResult = MyUdpClient.BeginReceive(HandleIncomingUdpRequest, null);
WaitHandle.WaitAny(new[] { _stopHandle, asyncResult.AsyncWaitHandle });
}
catch (Exception ex)
{
using (var sw = new StreamWriter("log.txt"))
{
sw.WriteLine("Date:" + DateTime.Now + "\r\nError:" + ex.Message + "\r\n");
}
}
}
MyUdpClient.Close();
}
private void HandleIncomingUdpRequest(IAsyncResult ar)
{
var received = MyUdpClient.EndReceive(ar, ref _serverAddress);
var requestString = Encoding.ASCII.GetString(received);
var type = Helper.GetRequestType(requestString);
if (type != RequestType.Trying && type != RequestType.Unknown)
{
ProcessRequest(type, requestString);
}
}
所以,我把它包成DLL,现在这样使用它:
var factory = new Factory.HandlerFactory();
factory.RegisterHandler(RequestType.Options,()=> new OptionsHandler());
factory.RegisterHandler(RequestType.Unauthorized,() => new UnauthorizedHandler());
factory.RegisterHandler(RequestType.Ok,() => new OkHandler());
factory.RegisterHandler(RequestType.Invite,() => new InviteHandler());
factory.RegisterHandler(RequestType.Bye,() => new ByeHandler());
factory.RegisterHandler(RequestType.Error,() => new ErrorHandler());
Client cl = new Client(factory);
cl.Start();
cl.Register();
cl.Call("2");
的问题是,在cl.Call("2")
我得到“在System.dll中发生类型'System.ObjectDisposedException'的未处理异常”
var received = MyUdpClient.EndReceive(ar, ref _serverAddress);
而在Register()中,客户端应该发送注册请求,得到他不是Unauthorized的响应并调用UnauthorizedHandler,但是这没有发生。
您需要检查异常中的调用堆栈以确定*哪个*类型已被处理 - 这可能使您能够找出发生了什么。 –
我调试了DLL,发现问题是什么,谢谢! – Jamil