private void multithread_article_analysis(List <string> pure_list) { ArrayList target_search = new ArrayList(pure_list); prepared_list = new List <voc_object>(); mgr_merge_process_count = 0; mgr_smart_merge_thread_count = max_smart_merge_thread_count; int start_idx = 0, end_idx = 0; int total_count = target_search.Count; int scale = total_count / max_smart_merge_thread_count; int remain = total_count % max_smart_merge_thread_count; for (int i = 0; i < max_smart_merge_thread_count; i++) { start_idx = i * scale; end_idx = start_idx + scale; if (i == max_smart_merge_thread_count - 1) { end_idx += remain; } smart_search_info tmp_smart_search_info = new smart_search_info(); tmp_smart_search_info.search_start = start_idx; tmp_smart_search_info.search_end = end_idx; tmp_smart_search_info.search_list = target_search; ThreadPool.QueueUserWorkItem(new WaitCallback(smart_search_worker), tmp_smart_search_info); } UI_disable(); while (true) { if (mgr_smart_merge_thread_count == 0 || mgr_execute_all_thread == false) { break; } send_msg(mgr_merge_process_count.ToString() + " / " + pure_list.Count.ToString() + "\r\n", true); Thread.Sleep(100); } send_msg(mgr_merge_process_count.ToString() + " / " + pure_list.Count.ToString() + "\r\n", true); UI_enable(); }
public void smart_search_worker(object parameterObject) { smart_search_info search_info = (smart_search_info)parameterObject; int start = search_info.search_start; int end = search_info.search_end; List <voc_object> local_result = new List <voc_object>(); ArrayList search_list = search_info.search_list; try { for (int i = start; i < end && mgr_execute_all_thread; i++) { mgr_merge_process_count++; string line = (string)search_list[i]; string context = line; if (line.Length != 0) { if (this.checkBox1.Checked) { int line_count = 0; foreach (string o_line in original_text) { if (o_line.Trim().Length > 0) { string[] a_line = new string[] { o_line }; List <string> pure_list_without_valid_char = leave_the_valid_char(a_line); List <string> pure_list_split_to_single_word = split_to_single_word(pure_list_without_valid_char); bool is_get = false; foreach (string word in pure_list_split_to_single_word) { if (word.Trim().Trim(new Char[] { '-' }).Equals(line, StringComparison.CurrentCultureIgnoreCase)) { is_get = true; break; } } if (is_get) { line_count++; if (line_count == 1) { context += " = "; } string start_str = "######## " + line_count.ToString() + " ########\r\n"; context += start_str + o_line.Trim().Replace("=", "=") + "\r\n"; } } } } local_result.Add(new voc_object(line, DateTime.Now.ToString("yyyy'/'MM'/'dd"), context, 0)); } } lock (control_merge_system) { prepared_list.AddRange(local_result); } } catch (Exception e) { } finally { lock (control_merge_system) { mgr_smart_merge_thread_count--; } } }