private void btnCreateClients_Click(object sender, EventArgs e)
        {
            dgvClients.Rows.Clear();
            btnCreateClients.Enabled = false;
            _clients.Clear();

            for (int i = 0; i < nupClientsCount.Value; i++)
            {
                int        index  = dgvClients.Rows.Add();
                FakeClient client = new FakeClient(txtBxPstFolder.Text, chkBxCreatePstFiles.Checked, chkBxCompressPstFile.Checked, index);
                _clients.Add(client);
                dgvClients.Rows[index].Cells["ComputerName"].Value  = client.ComputerName;
                dgvClients.Rows[index].Cells["UserName"].Value      = client.UserName;
                dgvClients.Rows[index].Cells["ClientVersion"].Value = client.ClientVersion.ToString();
                dgvClients.Rows[index].Cells["PstCount"].Value      = client.PstFiles.Count;
                dgvClients.Rows[index].Cells["State"].Value         = client.State;
                dgvClients.Rows[index].Cells["ClientID"].Value      = client.ClientId;

                dgvClients.Rows[index].Cells["ClientObj"].Value = client;
                client.OnStateChanged += Client_OnStateChanged;
                dgvClients.Refresh();
            }
            btnStartClients.Enabled  = true;
            btnDeleteClients.Enabled = true;
        }
 private void btnStopClients_Click(object sender, EventArgs e)
 {
     foreach (DataGridViewRow row in dgvClients.Rows)
     {
         try
         {
             FakeClient client = (FakeClient)row.Cells["ClientObj"].Value;
             client.Stop();
         }
         catch (Exception) { }
     }
 }
        private void Client_OnStateChanged(object sender, EventArgs e)
        {
            FakeClient client = (FakeClient)sender;

            Action updateClientState = () =>
            {
                DataGridViewCell cell = dgvClients.Rows[client.RowIndex].Cells["State"];

                cell.Value = client.State.ToString();
                //dgvClients.Refresh();
                dgvClients.InvalidateCell(cell);
            };

            this.Invoke(updateClientState);
        }
 private void btnStartClients_Click(object sender, EventArgs e)
 {
     foreach (DataGridViewRow row in dgvClients.Rows)
     {
         try
         {
             FakeClient client         = (FakeClient)row.Cells["ClientObj"].Value;
             System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(client.Start));
             t.IsBackground = true;
             _threadList.Add(t);
             t.Start();
         }
         catch (Exception) { }
     }
     btnStopClients.Enabled = true;
 }