2016-12-16 93 views
0

我周围100个远程服务器及以下的,我怎么想一些文件 从我的电脑复制到所有这些远程服务器中有,但我想要做一些检查文件复制到远程服务器检查

1-检查如果到远程服务器连接可用如果没有的话去隔壁办公室

2用户交互

A-我试图颜色选择行的datagridview1让用户知道whcih办公室的进展是现在和alos在datagridview2同样的事情,让用户知道在哪个文件的进展是现在在特定的办公室,但开始发送文件后,界面冻结,没有互动发生什么?

b-如何成功完成绿色成品办公室排如果成功?

更新

我用线程解决形式冻结这样的反馈将返回到用户 ,但问题没有得到解决,仍然会发生并没有什么变化,请我应该怎么办???

public void PatchUpdates() 
{ 
    try 
    { 
     foreach (DataGridViewRow OfficeListRow in DGV_OfficeList.Rows) 
     { 
      string OfficeIPAddress = OfficeListRow.Cells[2].Value.ToString(); 

      foreach (DataGridViewRow FileListRow in DGV_FileList.Rows) 
      { 
       string SoruceFileNamePath = FileListRow.Cells[4].Value.ToString(); 
       string DestinationFileNamePath = @"\\" + OfficeIPAddress + @"\usb1_1\test\" + Path.GetFileName(SoruceFileNamePath); 


       Thread foregroundthread = new Thread(() => CheckOffice(OfficeIPAddress)); 

       foregroundthread.Start(); 

       //check if connection to remote server is available 
       if (CheckOffice(OfficeIPAddress) == 1) 
       { 
        DGV_OfficeList[3, DGV_OfficeList.CurrentCell.RowIndex].Value = "Connected"; 
        //file.copy(sorucefilenamepath, destinationfilenamepath, true); //copy files... 
       } 
       else if (CheckOffice(OfficeIPAddress) == 0) 
       { 
        DGV_OfficeList[3, DGV_OfficeList.CurrentCell.RowIndex].Value = "disconnected"; 
        break; 
       } 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

检查连接方法

public int CheckOffice(string _ipAddress) 
{ 
    int timeout = 120; 
    string data = "PingTestData"; 
    byte[] buffer = Encoding.ASCII.GetBytes(data); 

    Ping PingSender = new Ping(); 
    PingOptions options = new PingOptions(); 

    options.DontFragment = true; 

    PingReply reply = PingSender.Send(_ipAddress, timeout, buffer, options); 

    if (reply.Status == IPStatus.Success) 
    { 
     return 1; 
    } 
    else 
    { 
     return 0; 
    } 
} 

enter image description here

回答

0

这是一个很大的问题,我认为这是不把他们在一个岗位是一个好主意。但是我可以回答一部分: 1-我认为你的网络检查不起作用。 “GetIsNetworkAvailable”方法仅检查您的计算机是否连接到网络。你需要优先“ping”或类似的东西(MSDN Ping class)。顺便说一句。如果在检测到网络故障后使用“返回”,则退出该方法。使用“break”而不是离开内循环。

2 - 正如你的链接描述File.Copy是成功还是抛出一个异常。所以在那里描述的方式应该没问题。

3-要显示你需要使用一个后台工作线程(BackgroundWorker)的进展情况。

+0

我不得不使用ping类 现在我有问题,在DataGridView中返回的结果是不正确的更新我的职务与检查大多数时间,有时整个电脑冻结并重新启动...是否有任何建议关于该检查reomte服务器检查部分? – sam

+0

@Sam:数据网格视图中的结果不正确 - >在foreach循环中运行不会更改由ping响应更新的gridview的当前单元格 –

+0

@Sam PC冻结并重新启动 - >您正在使用哪个操作系统?这应该不会发生在运行Windows NT 4或更高版本的系统上的正常应用程序代码。 –

0

我猜测PatchUpdates从GUI线程调用。如果在复制文件的循环中更新DataGridViewRow.Selected,那么GUI将永远不会反映该更改,因为您的函数尚未返回。有几种方法来处理它。

  1. (Hackiest,但最快)调用DataGridViewRow.Selected变化
  2. (清洁解决方案,但更多的努力)后Application.DoEvents()在后台线程中执行此处理,并切换到GUI线程使用Control.BeginInvoke()方法来更新GUI。

现在除此以外,还有在你的代码问题一大堆:

下面的线不会改变,但被称为一个循环,如果你的网络连接被删除或不经常检查。这可能是你实际需要的,但它是一种错误。也许你想使用Ping类来检查机器是否可用?

if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()) 

您刚刚切换了值,可能无缘无故。也许你只是试图调试你的解决方案。或者,也许你其实想行闪烁,但不会使用此代码发生

OfficeListRow.Selected = true; 
OfficeListRow.Selected = false; 
+0

首先,如果你的意思是PatchUpdates是CMD补丁文件,我现在已经在为那个过程使用补丁文件,但是我想改善一些事情以使它更好,所以我正在C#项目上工作 – sam

+0

秒我对线程一无所知请不要介意给西摩例如?在我的代码中的其他问题,请让我知道对他们不正常的工作..谢谢 – sam

+0

你如何建议检查远程服务器的可用性?因为我已经更新了我的帖子并且现在使用了ping类...并且是,我真正想要检查连接的东西被删除或者没有那么糟糕的策略拷贝用于下一个服务器,而不是堆叠在一个服务器上,更好的是同时复制到所有服务器 – sam

相关问题