//--------------------------------------------------------------------------------------- private void PushRequest(TaxonCommentRequest _request) { lock (_ListRequest) { _ListRequest.Add(_request); } _Thread.Priority = ThreadPriority.Normal; _LockEvent.Set(); }
//--------------------------------------------------------------------------------------- private TaxonCommentRequest PopRequest() { TaxonCommentRequest result = null; lock (_ListRequest) { if (_ListRequest.Count > 0) { result = _ListRequest[0]; _ListRequest.RemoveAt(0); } } return(result); }
//--------------------------------------------------------------------------------------- public void GetComment(object _owner, TaxonTreeNode _t, bool _recursive, OnCommentLoaded _callback) { FreeComment(_owner); TaxonCommentRequest request = new TaxonCommentRequest { Owner = _owner, MainTaxon = _t, CurrentTaxon = _t, Recursive = _recursive, Callback = _callback }; PushRequest(request); }
void TaxonCommentsLoop() { while (!_Exit) { _LockEvent.WaitOne(); if (_ListRequest.Count == 0) { _LockEvent.Reset(); _Thread.Priority = ThreadPriority.Lowest; continue; } TaxonCommentRequest request = PopRequest(); Console.WriteLine(request.CurrentTaxon.Desc.RefMultiName.Main); if (request == null) { continue; } string comment = null; if (!GetCommentFromMemory(request.CurrentTaxon, ref comment)) { CommentFileDesc commentFile = CommentFile(request.CurrentTaxon); if (commentFile != null) { try { if (commentFile.Collection.IsDistant()) { using (WebClient client = new WebClient()) { client.Encoding = System.Text.Encoding.UTF8; string url = commentFile.GetDistantPath(); Console.WriteLine(url); comment = client.DownloadString(url); } } else { VinceToolbox.fileFunctions.readTextFile(commentFile.GetHtmlName(), ref comment); } comment = TransformHTMLComment(comment, commentFile); // StoreCommentInMemory(request.CurrentTaxon, comment); } catch { } } } // request.Callback(request.Owner, request.MainTaxon, request.CurrentTaxon, comment); if (request.Result == null) { request.Result = new TaxonCommentRequestResult() { Main = request.MainTaxon } } ; request.Result.Comments.Add(new Tuple <TaxonTreeNode, string>(request.CurrentTaxon, comment)); if (request.Recursive && request.CurrentTaxon.Father != null) { request.CurrentTaxon = request.CurrentTaxon.Father; PushRequest(request); } else { request.Callback(request.Owner, request.Result); } } } //========================================================================================= // Request list // List <TaxonCommentRequest> _ListRequest = new List <TaxonCommentRequest>();