private void MainForm_Load(object sender, EventArgs e) { try { Config.Load("config.xml"); ConsoleMessage("Data loaded successfully."); image = new GrayImage(Config.getInstance().ResolutionX, Config.getInstance().ResolutionY); image.ImageGenerated += image_ImageGenerated; image.StartGenerate(Config.getInstance().FrameRate); connection = new TcpConnection(Config.getInstance().Ip, Config.getInstance().Port.ToString()); connection.DataSent += connection_DataSent; connection.ShowMessage += ConsoleMessage; connection.StartSend(Config.getInstance().NetSpeed); } catch (ArgumentException ex) { ConsoleMessage(ex.Message); return; } catch (FormatException ex) { ConsoleMessage(ex.Message); return; } catch (Exception ex) { ConsoleMessage(ex.Message); ConsoleMessage("Default data loaded."); } }
private async void SendAsync(int msPeriodSend) { int msDataSending; var sw = new Stopwatch(); while (true) { ShowMessage("Waiting for a connection..."); client = await server.AcceptTcpClientAsync(); ShowMessage("Connected!"); stream = client.GetStream(); int millisecondsDelay; while (!cancelTokenSource.Token.IsCancellationRequested) { sw.Restart(); try { if (imageCollection.TryTake(out Bitmap bmp)) { var data = await Task.Run(() => GrayImage.GrayImageToByte(bmp)); await stream.WriteAsync(data, 0, data.Length); } } catch { client.Close(); ShowMessage("Client disconnected!"); break; } sw.Stop(); ShowMessage("Data sent!"); msDataSending = (int)sw.ElapsedMilliseconds; DataSent?.Invoke(msDataSending); millisecondsDelay = msPeriodSend - msDataSending; if (millisecondsDelay > 0) { await Task.Delay(millisecondsDelay, cancelTokenSource.Token); } } } }