Wusste nicht, welchen Titel zu setzen, weil ich nicht genau weiß, was das Problem ist. Ich hatte eine funktionierende c#
Code, ich wickelte es in dll
Client von anderen Funktionen zu trennen, aber jetzt funktioniert es nicht wie beabsichtigt. Es ist ein Client-Server über udp
. Hier ist mein Code:C# - dll funktioniert nicht richtig
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();
Und in Client:
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);
}
}
Also wickelte ich es in dll, und jetzt ist es wie folgt verwenden:
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");
Das Problem ist, auf cl.Call("2")
Ich bekomme "Eine nicht behandelte Ausnahme vom Typ 'System.ObjectDisposedException' in System.dll aufgetreten" in
var received = MyUdpClient.EndReceive(ar, ref _serverAddress);
Und in Register(), Client sollte Register Request senden, erhalten Antwort, dass er nicht unbefugt ist und UnauthorizedHandler aufrufen, aber das ist nicht passiert.
Sie müssen den Aufruf-Stack in der Exception überprüfen, um festzustellen, * welcher * Typ entsorgt wurde - damit können Sie wahrscheinlich herausfinden, was passiert. –
Ich debuggte DLL und gefunden, was das Problem war, danke! – Jamil