Pārlūkot izejas kodu

Fixed UI deadlock when sending notifications to oneself.

Kenric Nugteren 2 gadi atpakaļ
vecāks
revīzija
968cd8b504
2 mainītis faili ar 24 papildinājumiem un 3 dzēšanām
  1. 14 2
      InABox.Server/IPC/PipeIPCServer.cs
  2. 10 1
      inabox.client.ipc/IPCClient.cs

+ 14 - 2
InABox.Server/IPC/PipeIPCServer.cs

@@ -313,7 +313,13 @@ namespace Piping
                     }
 
                     var response = method.Invoke(this, new object[] { e.Message, new RequestData(e) }) as PipeResponse;
-                    e.Connection.WriteAsync(response);
+                    e.Connection.WriteAsync(response).ContinueWith(task =>
+                    {
+                        if (task.Exception != null)
+                        {
+                            Logger.Send(LogType.Error, "", $"Error in response: {CoreUtils.FormatException(task.Exception)}");
+                        }
+                    });
                 }
                 catch (Exception err)
                 {
@@ -326,7 +332,13 @@ namespace Piping
                             var response = (Activator.CreateInstance(responseType) as Response)!;
                             response.Status = StatusCode.Error;
                             response.Messages.Add(err.Message);
-                            e.Connection.WriteAsync(e.Message.Respond(response));
+                            e.Connection.WriteAsync(e.Message.Respond(response)).ContinueWith(task =>
+                            {
+                                if (task.Exception != null)
+                                {
+                                    Logger.Send(LogType.Error, "", $"Error in response: {CoreUtils.FormatException(task.Exception)}");
+                                }
+                            });
                         }
                     }
                 }

+ 10 - 1
inabox.client.ipc/IPCClient.cs

@@ -101,7 +101,16 @@ namespace InABox.Client.IPC
             }
             else
             {
-                OnPush?.Invoke(e.Message);
+                Task.Run(() =>
+                {
+                    OnPush?.Invoke(e.Message);
+                }).ContinueWith(task =>
+                {
+                    if (task.Exception != null)
+                    {
+                        Logger.Send(LogType.Error, "", $"Error in IPC Client Push: {CoreUtils.FormatException(task.Exception)}");
+                    }
+                });
             }
         }