2016-09-23 22 views
-1

我發佈了這條代碼,以便代碼對任何人都有用。將文本添加到TextBlock中,每次只能輸入一個字符

基於Noctis的建議稍微縮減了代碼。

StringBuilder DescriptionText = new StringBuilder(); 

async void RunDescription(StringBuilder description) 
{ 
    DescriptionText = description; 

    await Task.Delay(1000); // Short delay before the text starts printing so the window has time to load 

    new Thread(AddTextToTextBlock).Start(); 
} 

void TextBlockDispatcher(string text) 
{ 
    TextBlock1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => TextBlock1.Inlines.Add(text))); 
} 

void AddTextToTextBlock() 
{ 
    foreach (char c in DescriptionText.ToString()) 
    { 
     Thread.Sleep(30); 
     TextBlockDispatcher(c.ToString()); 
    } 
} 
+1

您希望某人查看並提出建議的工作代碼屬於codereview.stackexchange.com。即使在那裏,你也需要提供一個很好的[mcve],清楚地說明你想要評論的方面。堆棧溢出是針對特定的,實用的_problems_和代碼。 –

+1

我投票結束這個問題作爲題外話,因爲它屬於codereview.stackexchange.com – Jeff

+0

@PeterDuniho謝謝,我會在將來牢記這一點。 – Cusha

回答

2

聽起來像平常的箍環,你需要跳過。我唯一可能考慮改變的不是調用調度器,而是檢查它是否有訪問權限,只需直接在對象上調用它。 它看起來有點像:

TextBlock1.Dispatcher.BeginInvoke((Action)(() => /* logic here */) 

節省您的電話,但同樣真的一樣。 你需要按摩它,因爲這是從我的頭頂,但它應該指向你在正確的方向。

+0

如果你看到我最後的評論,不要介意。忽略了一些愚蠢的東西。你的建議效果很好,但我認爲我仍然可能需要至少一種方法,這很好。 – Cusha

相關問題