Ejemplo n.º 1
0
        private void DisconnectAll()
        {
            synchronisationMasterListener?.Dispose();
            sendCommandToolStripMenuItem.Enabled = false;

            if (connectionsRows.Count == 0)
            {
                return;
            }

            dataLogger?.Stop();
            dataLogger?.ActiveConnections.Clear();
            dataLogger?.UpdateConnections();

            sendRates?.ActiveConnections.Clear();
            sendRates?.UpdateColumns();

            ProgressDialog progress = new ProgressDialog();

            progress.Text  = "Disconnecting";
            progress.Style = ProgressBarStyle.Continuous;

            progress.CancelButtonEnabled = false;
            progress.ProgressMessage     = "";
            progress.Progress            = 0;
            progress.ProgressMaximum     = connectionsRows.Count;

            ManualResetEvent dialogDoneEvent = new ManualResetEvent(false);

            Thread disconnectThread = new Thread(() =>
            {
                try
                {
                    int index = 0;
                    foreach (ConnectionRow connection in connectionsRows)
                    {
                        if (progress.Visible == true)
                        {
                            Invoke(new MethodInvoker(() =>
                            {
                                progress.ProgressMessage = "Disconnecting from " + connection.Connection.Settings.GetDeviceDescriptor() + ".";
                                progress.Progress        = ++index;
                            }));
                        }

                        connection.Connection.Message -= Connection_Message;
                        connection.Connection.Dispose();
                    }

                    Thread.CurrentThread.Join(100);
                }
                finally
                {
                    dialogDoneEvent.Set();
                }

                Invoke(new MethodInvoker(() => { progress.Close(); }));
            });

            disconnectThread.Name = "Disconnecting from " + connectionsRows.Count + " Devices";
            disconnectThread.Start();

            progress.ShowDialog(this);

            dialogDoneEvent.WaitOne();

            connectionsRows.Clear();
            dataGridView1.Rows.Clear();

            SetTitle();
        }