using ByteBank.Core.Model;
using ByteBank.Core.Repository;
using ByteBank.Core.Service;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ByteBank.View
{
    public partial class MainWindow : Window
    {
        private readonly ContaClienteRepository r_Repositorio;
        private readonly ContaClienteService r_Servico;
        public MainWindow()
        {
            InitializeComponent();
            r_Repositorio = new ContaClienteRepository();
            r_Servico = new ContaClienteService();
        }
        private void BtnProcessar_Click(object sender, RoutedEventArgs e)
        {
            var contas = r_Repositorio.GetContaClientes();
            var conta1 = contas.Take(contas.Count() / 2);
            var conta2 = contas.Skip(contas.Count() / 2);
            var resultado = new List<string>();
            AtualizarView(new List<string>(), TimeSpan.Zero);
            var inicio = DateTime.Now;
            Thread t1 = new Thread(() => {
                foreach (var item in conta1)
                {
                    var resultadoConta = r_Servico.ConsolidarMovimentacao(item);
                    resultado.Add(resultadoConta);
                }
            });
            Thread t2 = new Thread(() => {
                foreach (var item in conta2)
                {
                    var resultadoConta = r_Servico.ConsolidarMovimentacao(item);
                    resultado.Add(resultadoConta);
                }
            });
            t1.Start();
            t2.Start();
            while(t1.IsAlive || t2.IsAlive)
            {
                Thread.Sleep(360);
            }
        }
        private void AtualizarView(List<String> result, TimeSpan elapsedTime)
        {
            var tempoDecorrido = $"{ elapsedTime.Seconds }.{ elapsedTime.Milliseconds} segundos!";
            var mensagem = $"Processamento de {result.Count} clientes em {tempoDecorrido}";
            LstResultados.ItemsSource = result;
            TxtTempo.Text = mensagem;
        }
    }
}
ao clicar no botao e disparado a funçao btnProcessar_Click, primeiro ele atualiza view sem nada certo? ae e executado as thread e a principal dorme, quando acorda executa a funçao botao de novo e isso?
 
            