private void button1_Click(object sender, EventArgs e)
 {
     if (dataGridView1.Rows.Count > 0 && IsValidIP(textBox1.Text) && textBox2.Text.Length > 0)
     {
         TransferNamespace.FilesTransfer transfer = new TransferNamespace.FilesTransfer() { Action = FileTransferring.TransferNamespace.Action.Invite };
         transfer.Files = new List<TransferNamespace.Transfer>();
         foreach (DataRow i in files.Rows)
         {
             if (((EDataType)i["Type"]) == EDataType.Folder)
             {
                 if (!Directory.Exists((string)i["Path"])) continue;
                 DirectoryInfo dir = new DirectoryInfo((string)i["Path"]);
                 string root = dir.Parent.FullName;
                 string name = dir.Name;
                 transfer.Files.AddRange(RecurseFolder(root, @"\" + name));
             }
             else
             {
                 if (!File.Exists((string)i["Path"])) continue;
                 FileInfo file = new FileInfo((string)i["Path"]);
                 TransferNamespace.Transfer t = new TransferNamespace.Transfer();
                 t.Catalog = "<root>";
                 t.Id = Guid.NewGuid().ToString() + Guid.NewGuid().ToString();
                 t.Name = file.Name;
                 t.FullPath = file.FullName;
                 t.Length = file.Length;
                 transfer.Files.Add(t);
             }
         }
         transfer.Name = textBox2.Text;
         TransferNamespace.TransferClient client = new FileTransferring.TransferNamespace.TransferClient(HelpClass.ConfigureEndpoint(), new EndpointAddress("net.tcp://" + textBox1.Text + ":7634/ClientTransferring/tcp"));
         try
         {
             client.Open();
         }
         catch { MessageBox.Show("Can not connect to the remote address!"); }
         FileProgressForm progress = new FileProgressForm(client,0);
         progress.BeginSend(transfer);
         try
         {
             progress.Show(this);
         }
         catch { }
     }
 }
 public IEnumerable<object> SendQuery(string ip, FilesTransfer transfer, int sport)
 {
     int port = 0;
     switch (transfer.Action)
     {
         case Action.Invite:
             {
                 port = HelpClass.GetAvailablePort();
                     ThreadStart start = delegate
                     {
                         form = new FileProgressForm(null, port);
                         form.sport = sport;
                         form.Show();
                         form.GetThread = new Thread(new ParameterizedThreadStart(form.GetInvoke));
                         form.GetThread.Start(transfer);
                     };
                     HelpClass.Form.BeginInvoke(start);
                     break;
             }
         default:
             {
                 return new List<object>() { (int)InviteRusult.Busy, 0 };
             }
     }
     return new List<object>() { (int)InviteRusult.Ok, port };
 }