Создать приложение, в отдельном потоке вычисляющее значение 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й параметр - процент выполнения нам не нужен, во втором передается результат вычисление
}
}
}
}