IEnumerator CheckReadTaskResult(TaskReadStream task, TextMesh textMesh) { while (TaskState.Pending == task.currentState) { if (null != textMesh) { textMesh.text = string.Format("Class: {0}\nPending...", task.GetType().ToString()); textMesh.color = Color.white; } yield return(null); } while (TaskState.Running == task.currentState) { if (null != textMesh) { textMesh.text = string.Format("Class: {0}\nProgress: {1}% ({2}/{3})", task.GetType().ToString(), task.result.readLength * 100f / task.runningTaskParam.length, task.result.readLength, task.runningTaskParam.length); textMesh.color = Color.green; } yield return(null); } if (null != textMesh) { if (null != task.result.exception) { textMesh.text = string.Format("Class: {0}\nException: {1}", task.GetType().ToString(), task.result.exception.Message); textMesh.color = Color.red; } else { if (task.result.readLength == task.runningTaskParam.length) { textMesh.text = string.Format("Class: {0}\nRead: Ok\nLength: {1}\nContent:\n{2}", task.GetType().ToString(), task.result.readLength, Encoding.UTF8.GetString(task.runningTaskParam.buffer, task.runningTaskParam.bufferOffset, task.result.readLength)); textMesh.color = Color.blue; } else { textMesh.text = string.Format("Class: {0}\nProgress: {1}% ({2}/{3})\nRead: Failed", task.GetType().ToString(), task.result.readLength * 100f / task.runningTaskParam.length, task.result.readLength, task.runningTaskParam.length); textMesh.color = Color.red; } } } task.runningTaskParam.stream.Close(); }
public bool EndRead() { if (null == readTask) { return(false); } if (!readTask.Operate(TaskOperation.End)) { return(false); } readTask = null; return(true); }
public bool StartRead() { if (null == driver) { return(false); } if (string.IsNullOrEmpty(filePath)) { return(false); } FileStream stream = null; try { stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); if (!stream.CanRead) { stream.Close(); return(false); } } catch (IOException) { if (null != stream) { stream.Close(); } return(false); } if (0 >= stream.Length) { stream.Close(); return(false); } EndRead(); readTask = CreateTask(); readTask.taskParam = new TaskReadStream.Param(); readTask.taskParam.stream = stream; readTask.taskParam.buffer = new byte[stream.Length]; readTask.taskParam.length = (int)stream.Length; if (!readTask.Operate(TaskOperation.Start)) { stream.Close(); return(false); } StartCoroutine(CheckReadTaskResult(readTask, textMesh)); return(true); }