Как заставить некоторые задачи изменить мои элементы управления WPF

Я хочу создать приложение WPF, которое делает следующее: приложение будет иметь 8 задач, работающих вместе. Каждая задача сможет добавить несколько строк в текстовое поле, отображаемое в главном окне.

как заставить все задачи выполняться одновременно и выполняться в основном потоке пользовательского интерфейса?

(30/04/13:)

см. следующий код:

private  void RunTasks(int ThreadsNumber)
    {           

        int Ratio = NumbersToCheck / ThreadsNumber;

        for (int i = 0; i < ThreadsNumber; i++)
        {
            Task.Run(() =>
                {
                    int counter = 0;
                    int low = Ratio * i;
                    int high = Ratio * (i + 1);

                    Dispatcher.Invoke(DispatcherPriority.Normal,
                                      (Action)(() =>
                                      {
                                          for (int j = low; j < high; j++)
                                          {
                                              if(IsPrime(j))
                                                  MessageList.Items.Add(j);

                                          }
                                      }));
                });                
        }

    }

MessageList — это список. почему, когда я запускаю этот код, id не видит наименьшие простые числа, добавленные в этот список? (3,5,7,11 и так далее).


person Tal Malaki    schedule 29.04.2013    source источник


Ответы (1)


Используйте Dispatcher, чтобы вызвать код в потоке пользовательского интерфейса из запущенного асинхронного потока:

// The Work to perform on another thread
Task.Run(()=>
{
  // long running operation...


  // Sets the Text on a Text Control from the Dispatcher 
  // so it will access the UI from the UI-Thread
  Dispatcher.Invoke(DispatcherPriority.Normal, 
                    (Action)(() => { myText.Text = "From other thread!"; }));
});
person IsNull    schedule 29.04.2013
comment
Спасибо за вашу помощь. Как это сделать с задачами? - person Tal Malaki; 30.04.2013
comment
пожалуйста, посмотрите мой новый вопрос, я написал код, но он не работает так, как я хочу. - person Tal Malaki; 30.04.2013