Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 异步/等待任务问题_C#_Wpf_Async Await - Fatal编程技术网

C# 异步/等待任务问题

C# 异步/等待任务问题,c#,wpf,async-await,C#,Wpf,Async Await,我有这段代码,我想在后台运行,但我做不到。GUI被冻结到最后。错误是什么?不管怎样,我试过了,但我还是试过。我有可以工作的代码,但不适用于这个示例:S Thx private RelayCommand _jugarCommand; public RelayCommand JugarCommand { get { return _jugarCommand ?? (_jugarCommand

我有这段代码,我想在后台运行,但我做不到。GUI被冻结到最后。错误是什么?不管怎样,我试过了,但我还是试过。我有可以工作的代码,但不适用于这个示例:S Thx

private RelayCommand _jugarCommand;
    public RelayCommand JugarCommand
    {
        get
        {
            return _jugarCommand ??
                   (_jugarCommand =
                       new RelayCommand(Jugar,
                           () => CantidadDeSimulaciones != null && Regex.IsMatch(CantidadDeSimulaciones, @"^\d+$")));
        }
    }  



private async void Jugar()
    {

        Jugadas = await CalcularJugadas();

        GanoA += Jugadas.Count(x => x.QuienGano == "JUGADOR A");
        GanoB += Jugadas.Count(x => x.QuienGano == "JUGADOR B");
        Empate += Jugadas.Count(x => x.QuienGano == "EMPATE");
        JugadasAcumuladas += 1;

    }

    private Task<ObservableCollection<Jugada>> CalcularJugadas()
    {

        return Task.Run(
            () =>
            {
                var calcularJugadas = new ObservableCollection<Jugada>();

                var numeroAleatorio = new Random();

                for (var iIndex = 1; iIndex <= Convert.ToInt16(CantidadDeSimulaciones); iIndex++)
                {

                    var randomNumberA = numeroAleatorio.NextDouble();
                    var randomNumberB = numeroAleatorio.NextDouble();
                    var queEligioA = QueEligio(randomNumberA).ToString();
                    var queEligioB = QueEligio(randomNumberB).ToString();

                    var nuevoJuegada = new Jugada
                    {
                        ID = iIndex,
                        NumeroAleatorioA = randomNumberA,
                        NumeroAleatorioB = randomNumberB,
                        JugadorA = new Jugador
                        {
                            QueEligio = queEligioA
                        },
                        JugadorB = new Jugador
                        {
                            QueEligio = queEligioB
                        },
                        QuienGano = QuienGano(queEligioA, queEligioB)
                    };

                    calcularJugadas.Add(nuevoJuegada);
                }

                return calcularJugadas;
            }
            );
    }
private RelayCommand\u jugarCommand;
公共关系社区JugarCommand
{
收到
{
返回_jugarCommand??
(_jugarCommand)=
新RelayCommand(Jugar,
()=>CantidadDeSimulaciones!=null&&Regex.IsMatch(CantidadDeSimulaciones,@“^\d+$”);
}
}  
私有异步void Jugar()
{
Jugadas=等待计算Jugadas();
GanoA+=Jugadas.Count(x=>x.QuienGano==“JUGADOR A”);
GanoB+=Jugadas.Count(x=>x.QuienGano==“JUGADOR B”);
Empate+=Jugadas.Count(x=>x.QuienGano==“Empate”);
JugadasAcumuladas+=1;
}
私有任务CalcularJugadas()
{
返回任务。运行(
() =>
{
var calcularJugadas=新的可观测集合();
var numerioaleatorio=新随机数();

对于(var iIndex=1;iIndex您没有正确应用异步的概念。请先将您的CalcularJugadas更改为异步

另外,您可能需要更改任务。运行到TaskFactory.StartNew以获得更好的多线程处理。(请注意,StartNew正在等待)。您的函数如下所示:

    private async Task<ObservableCollection<Jugada>> CalcularJugadas()
{

    return  await TaskFactory.StartNew(
        () =>
        {
            var calcularJugadas = new ObservableCollection<Jugada>();

            var numeroAleatorio = new Random();

            for (var iIndex = 1; iIndex <= Convert.ToInt16(CantidadDeSimulaciones); iIndex++)
            {

                var randomNumberA = numeroAleatorio.NextDouble();
                var randomNumberB = numeroAleatorio.NextDouble();
                var queEligioA = QueEligio(randomNumberA).ToString();
                var queEligioB = QueEligio(randomNumberB).ToString();

                var nuevoJuegada = new Jugada
                {
                    ID = iIndex,
                    NumeroAleatorioA = randomNumberA,
                    NumeroAleatorioB = randomNumberB,
                    JugadorA = new Jugador
                    {
                        QueEligio = queEligioA
                    },
                    JugadorB = new Jugador
                    {
                        QueEligio = queEligioB
                    },
                    QuienGano = QuienGano(queEligioA, queEligioB)
                };

                calcularJugadas.Add(nuevoJuegada);
            }

            return calcularJugadas;
        }
        );
}
专用异步任务CalcularJugadas()
{
return wait TaskFactory.StartNew(
() =>
{
var calcularJugadas=新的可观测集合();
var numerioaleatorio=新随机数();

对于(var iIndex=1;iIndex Hi@avechuche),您是否可以尝试将Jugar方法的返回改为Task而不是void,并将RelayCommand实例改为“new RelayCommand(async()=>await Jugar(),…”?也可以将CalcularJugadas标记为async?