Создать приложение, в отдельном потоке вычисляющее значение w и непрерывно обновляющее его в потоке - C#

Узнай цену своей работы

Формулировка задачи:

Ребят, с потоками не работал не когда. Есть задание , я понимаю что хотят, а вот как сделать потоками хз . Создайте приложение, в отдельном потоке вычисляющее значение w и непрерывно обновляющего его в пользовательском интерфейсе. Для расчета числа использовать следующую формулу. W = 1 + sin(x) – 2*cos(x) + 4*sin2(x) – 8*cos2(x) +.. Тип каждый раз как идет вычисление сразу выводить результат а потом добавлять след. переменную. W = 1 + sin(x) "вывод результата" W = 1 + sin(x) – 2*cos(x) "вывод результата" и т.д Выводить, как я понял тупо в консоль. Если кто может помочь сделать или у кого-то есть похожое готовое задание , пж помогите. Буду благодарен.

Решение задачи: «Создать приложение, в отдельном потоке вычисляющее значение w и непрерывно обновляющее его в потоке»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ConsoleApplication1
{
class Program
    {
        static public void Main(string[] args)
        {
            System.ComponentModel.BackgroundWorker bgWorker = new System.ComponentModel.BackgroundWorker();
            bgWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgWorker_DoWork); //Здесь происходят вычислиения
            bgWorker.WorkerReportsProgress = true; // Разрешаем сообщать о прогрессе
            bgWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(bgWorker_ProgressChanged); //Этот метод вызывается когда из потока вызывается ReportProgress
            bgWorker.RunWorkerAsync(); //Запускаем поток на выполнение
            while (bgWorker.IsBusy)
            { }
            Console.ReadKey(true);
        }
 
        static void bgWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            Console.WriteLine(((double)e.UserState).ToString("F4"));
        }
 
        static void bgWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            
            double w = 0;
            double x = 1.5;
            for (int i = 0; i < 100; i++)
            {
                if (i % 2 == 0)
                    w += Math.Pow(2, (double)i) * i + Math.Cos(x);
                else
                    w += Math.Pow(2, (double)i) * i + Math.Sin(x);
                (sender as System.ComponentModel.BackgroundWorker).ReportProgress(0, w); //Здесь 1й параметр - процент выполнения нам не нужен, во втором передается результат вычисление
            }
        }
        
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы