private async void UserSelect(object obj) { var collection = obj as IList; if (collection == null) { return; } var fileArray = FileTookit.FileDialogSelect(); var taskList = new List <Task>(); foreach (var t in collection) { //TODO : 1 先Begin,让Service Push Call目标客户端开启文件传输服务 //TODO : 2 再直接建立连接进行局域网测试,若测试失败,则使用服务端进行Try测试,若测试均失败,则return 退出传输,最好能报个错误 ClientToken targetToken = t as ClientToken; targetToken.TaskId = $"{targetToken.ServicePort}+{Guid.NewGuid()}"; var task = new Task(() => { if (targetToken.OnlineState == OnlineStateEnum.Online) { if (!BeginRemoteUpdateService(targetToken)) { return; } Console.WriteLine("开始测试LAN连接!"); bool lanConnectResult = LanFileUpdateTest(targetToken); if (!lanConnectResult) { Console.WriteLine("局域网连接测试失败了!!"); } RunFileTransfer(lanConnectResult, fileArray, targetToken.ServicePort, ClientProxy, targetToken); if (!EndRemoteUpdateService(targetToken)) { throw new Exception("关闭远程服务出错"); } } else { Console.WriteLine($"在想什么呢?没看到{targetToken.NickName}不在线吗?"); } }); taskList.Add(task); task.Start(); } await Task.WhenAll(taskList.ToArray()); }
public bool ClearTemperary() { var tmpDirectory = $"{System.AppDomain.CurrentDomain.BaseDirectory}\\{TEMPORARYDIRECTORY}"; var tmp = new DirectoryInfo(tmpDirectory); if (!tmp.Exists) { tmp.Create(); } else { //clear all the files of directory FileTookit.DeleteFile(tmp.FullName); } return(true); }
public void FileWait(string path) { #if DEBUG Console.WriteLine("Waiting file release"); #endif bool usingWait = true; int times = 0; while (usingWait && times < 10)//最多等待10秒 { usingWait = FileTookit.CheckFileIsNotUsing(path); if (usingWait) { break; } Thread.Sleep(1000); times++; } if (!usingWait)//仍然被占用 { throw new NotSupportedException($"{path} 文件被占用"); } }