public void thread(System.Func <object[], object> func, System.Func <object[], object> callback) { Thread t = new Thread(new ThreadStart(delegate { func(null); ThreadInvoker.InvokeInMainThread(delegate { callback(null); }); Thread.CurrentThread.Abort(); })); t.Start(); }
void DownloadWorker(object url) { string _url = url.ToString(); try { string _filepath = RegGet(_url); Stream write; long start_position = 0; if (File.Exists(_filepath)) { write = File.OpenWrite(_filepath); start_position = write.Length; write.Seek(start_position, SeekOrigin.Current); } else { write = new FileStream(_filepath, FileMode.Create); } try { HttpWebRequest httpWebRequest = WebRequest.Create(_url) as HttpWebRequest; if (start_position != 0) { httpWebRequest.AddRange(start_position); } Stream read = httpWebRequest.GetResponse().GetResponseStream(); byte[] buffer = new byte[512]; int read_size = read.Read(buffer, 0, buffer.Length); while (read_size > 0) { write.Write(buffer, 0, read_size); read_size = read.Read(buffer, 0, buffer.Length); } write.Close(); read.Close(); if (data_callback.ContainsKey(_url)) { ThreadInvoker.InvokeInMainThread(delegate { data_callback[_url](_filepath); data_callback.Remove(_url); }); } } catch (Exception e) { write.Close(); throw new Exception(e.ToString()); } unReg(_url); data_thread.Remove(_url); } catch (Exception e) { Debug.LogError(e.ToString()); data_thread.Remove(_url); Thread.CurrentThread.Abort(); } Thread.CurrentThread.Abort(); }