問題が何であるか正確にはわからないため、どのタイトルを設定するのか分かりませんでした。 私は働いていた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();
とクライアントで:ここに私のコードである上、
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");
を、問題がある:
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にそれを包み、 cl.Call("2")
「処理されていない例外がSystem.dllでSystem.ObjectDisposedExceptionが発生しました」
var received = MyUdpClient.EndReceive(ar, ref _serverAddress);
Register()では、クライアントはRegister Requestを送信し、Unauthorizedではないという応答を取得し、UnauthorizedHandlerにコールする必要がありますが、これは起こっていません。
例外のコールスタックを検査して、どのタイプが廃棄されたかを判断する必要があります。これにより、おそらく何が起きているのかを知ることができます。 –
私はdllをデバッグし、何が問題なのかを知りました。ありがとう! – Jamil