Вывод информации из класса во время выполнения метода в TextBox формы

268
26 декабря 2017, 14:22

Добрый день, столкнулся с непониманием того как вывести актуальную информацию на TextBox из метода класса. У меня есть класс :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TextIteration
{
class Iteration
{
    public void StartIterator()
    {
        for (int i = 0; i < 1000; i++)
        {
            // Вывод числа i.
            Thread.Sleep(100);
        }
    }
}
}

Перечисление числа I из цикла я хочу получить в TextBox формы когда нажму кнопку на форме. Как правильно реализовать это?

Answer 1

Вывод правда я сделал в Label, а не TextBox, ну да это по невнимательности.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    //источник токена отмены
    private CancellationTokenSource _tokenSource;
    private async void buttonStart_Click(object sender, EventArgs e)
    {
        //через него будем оповещать о ходе выполнения задачи
        Progress<string> progess = new Progress<string>(text => this.labelOutput.Text = text);
        //готовим токен отмены
        _tokenSource = new CancellationTokenSource();
        CancellationToken cancelToken = _tokenSource.Token;
        //кнопки
        buttonStart.Enabled = false;
        buttonCancel.Enabled = true;
        try
        {
            await Task.Run(() => DoIteration(cancelToken, progess), cancelToken);
        }
        catch (OperationCanceledException)
        {
            //случай отмены
            this.labelOutput.Text = "0";
        }
        catch (Exception)
        {
            this.labelOutput.Text = "Ошибка";
        }
        finally
        {
            //кнопки
            buttonStart.Enabled = true;
            buttonCancel.Enabled = false;
        }
    }
    //метод выводит числа
    private void DoIteration(CancellationToken cancelToken, IProgress<string> progess)
    {
        Iteration iteration = new Iteration();
        foreach (int number in iteration.StartIterator())
        {
            progess.Report(number.ToString());
            //выбрасываем исключение в случае нажатия на кнопку отмены
            cancelToken.ThrowIfCancellationRequested();
        }
    }
    private void buttonCancel_Click(object sender, EventArgs e)
    {
        _tokenSource.Cancel();
    }
}
class Iteration
{
    public IEnumerable<int> StartIterator()
    {
        for (int i = 0; i < 1000; i++)
        {
            // Вывод числа i.
            Thread.Sleep(100);
            yield return i;
        }
    }
}
READ ALSO
Чтение события из другой программы

Чтение события из другой программы

Есть 2 программы1 работает в фоне(далее ФП) другая в оконном режиме(далее ОП)

329
Как десериализовать ArraySegment&lt;byte&gt; в object внутри WebSocke

Как десериализовать ArraySegment<byte> в object внутри WebSocke

Как десериализовать ArraySegment в object внутри WebSocke? Я закоментировал часть кода в которой пытался это сделать, к примеру я пытался использовать...

298
Получить дочерний элемент UI в Unity?

Получить дочерний элемент UI в Unity?

Как у canvas в unity через скрипт получить его дочерний button, чтобы потом иметь возможность обращаться к нему и проверять на нажатия ? Пробовал так:

335
TcpClient hook close connect

TcpClient hook close connect

Подскажите есть ли обработчик closeconnect TcpClient?Нужен для вывода информации о дисконнекте

291