2016-09-23 6 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]를 제공해야합니다. 스택 오버플로는 코드와 함께 구체적이고 실제적인 _ 문제입니다. –

+1

codereview.stackexchange.com에 속해 있기 때문에이 질문을 주제와 관련이 없게 닫으려고합니다. – Jeff

+0

@PeterDuniho 감사합니다. – Cusha

답변

2

뛰어 내리는 데 필요한 일반적인 농구처럼 들립니다. 변경을 고려하는 유일한 방법은 발송자를 호출 한 다음 액세스 권한이 있는지 확인하고 개체에서 직접 호출하는 것입니다. 그것은 좀 보일 것 좋아 :

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

당신에게 전화를 저장하지만, 같은 같은 정말. 내 머리 꼭대기에 있기 때문에 마사지해야합니다.하지만 올바른 방향으로 향해야합니다.

+0

마지막으로 언급 한 내용을 읽으 셨다면 신경 쓰지 마십시오. 어리석은 걸 간과했다. 귀하의 제안은 훌륭하게 진행되었지만 적어도 하나 이상의 방법이 필요하다고 생각합니다. 괜찮습니다. – Cusha