亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

等待延遲毀掉打字機效果c#?

等待延遲毀掉打字機效果c#?

C#
一只甜甜圈 2022-09-04 16:41:26
我正在制作一個應用程序,我想在其中添加一個看起來很酷的打字機效果,而不會讓UI與thread.sleep凍結。所以我只是四處尋找一個解決方案,找到我在課堂上展示的異步的東西,一切都壞了,但我不明白為什么。它以前工作完美,但UI現在凍結了,但它沒有,但文本是隨機字符舊(工作但凍結 ui):    private bool Write(string text)    {        foreach (char c in text)        {            Console.AppendText(c.ToString());            System.Threading.Thread.Sleep(5);        }        Console.AppendText(Environment.NewLine);        return true;    }新(奇怪的字符不會凍結ui):    private async void Write(string text){        foreach (char c in text)        {            Console.AppendText(c.ToString());            await Task.Delay(5);        }        Console.AppendText(Environment.NewLine);    }我希望新代碼能夠修復它所做的ui凍結,但文本非常不可讀。這是前后的結果:之前(使用舊代碼和 ui 凍結):ModuleRemover is aan het kijken voor updates.ModuleRemover is al de laatste versie! (versie 2.4)后:MMododuuleleReRemomvoveerr i is s aaanl  hdeet l kaaitjsketen  vveoorsr iuep! d(atveesrs.ie 2.4)
查看完整描述

2 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

使用同步循環,您可以阻止任何其他活動,直到代碼完成“鍵入”。因此,第二次調用將不得不等待,并且輸出不會與第一個調用的輸出混合。Write


據推測,在版本中,您可以同時啟動兩個調用并讓它們并行運行 - 實際上它們會同時鍵入字符。asyncWrite


修復:退貨WriteTask


private async Task Write(string text) …

和在進行第二個調用之前進行第一個調用(您可能還需要使方法調用也異步:awaitWrite


await Write("First one");

await Write("Second one");


查看完整回答
反對 回復 2022-09-04
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

UI 凍結的原因可能是因為你使用的是 UI 的線程。這將凍結它。


private bool Write(string text)

{

    var t;

    foreach (char c in text)

    {

        t = Task.Run(() => Console.AppendText(c.ToString());

        t.Wait(TimeSpan.FromMilliseconds(50));

    }

    t = Task.Run(() => Console.AppendText(Console.AppendText(Environment.NewLine));

    t.Wait(); // wait for completion.

    return true;

}


查看完整回答
反對 回復 2022-09-04
  • 2 回答
  • 0 關注
  • 98 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號