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?