如何在不阻止用户使用UI的情况下等待线程?

时间:2019-07-03 19:32:53

标签: c# wpf multithreading

我有一个客户端服务器应用程序,一个琐事游戏。在此阶段,每个客户都有一定的时间来回答问题。如果他回答了问题,他将收到正确的答案,然后继续下一个问题。如果客户端无法回答,计时器将耗尽,并向客户端显示正确的答案(如前),然后继续前进。

我的问题是等待计时器用尽,然后继续前进。 如果程序正在等待线程,则客户端将无法使用UI;如果我不等待线程,则程序将跳过并继续。

    public void Manager()
    {
            //Game ended
        if (!setDisplay())//Displaying all the answers and question.
            gameEnded();
        else
           startThread(); //Starting CountDown //Now the user can answer
    }

这是主要部分。游戏结束时,“ setDisplay”返回false,并设置UI(更改标签等)

“ startThread”开始倒计时,用户可以从这一刻开始回答

    Action Done = () =>
    {
        //when done
        if (!currentLobby.hasAnswered)//time ran out.
        {
            currentLobby.hasAnswered = true;
            submitAnswerThread();
        }
    };

    public void startThread()
    {
        Thread t = new Thread(() => {
            try
            {
                for (var i = currentLobby.lobby.lobby.timePerQuestion; i > 0 || currentLobby.hasAnswered; i--)//TimeOut or answered.
                {
                    Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(delegate ()
                    {
                        this.timerLabel.Content = i.ToString();//Change the label to display the correct time left.
                    }));
                    Thread.Sleep(1000);
                }
            }
            finally
            {
                Done();
            }
        });
        t.Start();
    }

在此,线程完成后,它将检查用户是否已经回答,是否尚未回答,他将提交答案(TimeOut)。

我需要: 1.使Manager在每次计时器用尽时都得到照顾 2.以不会阻塞用户界面的方式进行操作。

提前感谢您,安通。

EDIT ::::有没有办法可以从另一个线程调用Manager?!?!? 这将解决我的问题!

0 个答案:

没有答案