Как сделать так, чтобы метод вызванный из нового потока выполнялся в основном - C#
Формулировка задачи:
Вот есть код, специально всё скопировал в новый проект и упростил, чтобы была только идея понятна и компилировалось. Как сделать так, чтобы событие отрабатывало в том потоке, в котором на него подписались и чтобы сразу поток инициировавший событие продолжил работу, а не ждал пока обработает событие основной поток? В моём коде это метод s_ParsingCompleted.
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading.Tasks; namespace ConsApp_ParallelForEach { class Program { static void Main(string[] args) { Something s = new Something(); s.ParsingCompleted += new EventHandler<ParsingCompletedEventArgs<string>>(s_ParsingCompleted); s.DoWork(); } static void s_ParsingCompleted(object sender, ParsingCompletedEventArgs<string> e) { //Как код находящийся тут выполнить в основном потоке } } public class ParsingCompletedEventArgs<T> : EventArgs { public IEnumerable<T> ParsingResult { get; protected set; } public ParsingCompletedEventArgs(IEnumerable<T> parsingResult) { ParsingResult = parsingResult; } } class Something { public void DoWork() { new Task(() => { ParallelOptions parOpt = new ParallelOptions(); ConcurrentQueue<string> infos = new ConcurrentQueue<string>(); Action<string, ParallelLoopState> body = (site, pLoopState) => { }; ParallelLoopResult res = Parallel.ForEach(new string[] { "", "" }, parOpt, body); if (res.IsCompleted) OnParsingCompleted(infos); }).Start(); } public event EventHandler<ParsingCompletedEventArgs<string>> ParsingCompleted; private void OnParsingCompleted(IEnumerable<string> result) { if (ParsingCompleted != null) ParsingCompleted(this, new ParsingCompletedEventArgs<string>(result)); } } }
Решение задачи: «Как сделать так, чтобы метод вызванный из нового потока выполнялся в основном»
textual
Листинг программы
App._mainWnd.addmessage (new Msg ("parsingEnd", ...)); // и дальше пошел. а главное окно обрабатывает (у меня на этот случай, //правда, еще один обработчик есть, чтоб не все в окно тулить, но это детали, // он все равно в потоке окна работает //каждый делает как ему удобно или просто нравится)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д