private void BSendMessage_Click(object sender, EventArgs e) { // Create separate thread for sending messages var ButtonHandlerThread = new Thread(() => { try { // Write message to pipe var message = tbMessage.Text; if (message.Length > 0) { var bBuffer = Encoding.Unicode.GetBytes(message); var bBufferCount = Encoding.Unicode.GetByteCount(message); namedPipe.Write(bBuffer, 0, bBufferCount); // Add new entry to log LoggerSingletone.WriteLineMutexed($"Client sent message: {message};"); } } catch (ArgumentException) { LoggerSingletone.WriteLineMutexed("Message buffer failed;"); } catch (Exception) { LoggerSingletone.WriteLineMutexed($"Client lost connection to [{pipeName}];"); isConnectedToPipe = false; setCEnabledInvoke(bSendMessage, false); setCEnabledInvoke(tbMessage, false); if (namedPipe != null) { namedPipe.Close(); namedPipe = null; } // Change text of button setCTextInvoke(bSubmit, "Connect"); } }); ButtonHandlerThread.IsBackground = true; ButtonHandlerThread.Start(); }
private void BSubmit_Click(object sender, EventArgs e) { // Start new thread // and connect/disconnect pipe var ButtonHandlerThread = new Thread(() => { // Disable button so client can't // interrupt operations setCEnabledInvoke(tbPipeName, false); setCEnabledInvoke(bSubmit, false); // Connect/Disconnect client if (isConnectedToPipe) { // Disconnect old pipe isConnectedToPipe = false; setCEnabledInvoke(bSendMessage, false); setCEnabledInvoke(tbMessage, false); if (namedPipe != null) { namedPipe.Close(); namedPipe = null; } // Change text of button setCTextInvoke(bSubmit, "Connect"); // Add new entry to log LoggerSingletone.WriteLineMutexed($"Client disconnected from pipe [{pipeName}];"); } else { // Update pipe name and connect to server if ((pipeName = tbPipeName.Text).Length > 0) { // Create new one-directional Named Pipe namedPipe = new NamedPipeClientStream(".", pipeName, PipeDirection.Out); // Try to connect client side // with server side of pipe try { namedPipe.Connect(5000); LoggerSingletone.WriteLineMutexed($"Client connected to pipe [{pipeName}];"); // Unblock message section isConnectedToPipe = true; setCEnabledInvoke(bSendMessage, true); setCEnabledInvoke(tbMessage, true); // Change text of button setCTextInvoke(bSubmit, "Disconnect"); } catch (Exception) { LoggerSingletone.WriteLineMutexed($"Failed to connect to pipe [{pipeName}];"); } } else { LoggerSingletone.WriteLineMutexed("Pipe name can't be empty string;"); } } // Re-enable button setCEnabledInvoke(bSubmit, true); setCEnabledInvoke(tbPipeName, true); }); ButtonHandlerThread.IsBackground = true; ButtonHandlerThread.Start(); }