C# Windows Form 응용 프로그램의 다른 스레드에서 TextBox에 쓰는 방법
C# Windows Form 응용 프로그램에서 내용 수정 UI 스레드가 아닌 스레드의 TextBox는 스레딩 문제를 일으킬 수 있습니다. 이를 해결하려면 스레드 안전성의 개념을 이해하는 것이 중요합니다.
스레드 안전성 이해
스레드 안전성이란 코드 블록이나 객체가 실행되는 능력을 의미합니다. 의도하지 않은 부작용을 일으키지 않고 여러 스레드에 의해 동시에 수행됩니다. Windows Form 애플리케이션의 컨텍스트에서 TextBox를 포함한 UI 컨트롤은 스레드로부터 안전하지 않습니다. UI가 아닌 스레드에서 해당 속성을 업데이트하려고 하면 예외가 발생하거나 예기치 않은 동작이 발생할 수 있습니다.
해결책: 제어 메서드 호출
별도 스레드에서 UI 요소를 안전하게 수정하려면 스레드의 경우 컨트롤의 Invoke 또는 BeginInvoke 메서드를 사용하여 해당 메서드를 호출해야 합니다. 이러한 메서드를 사용하면 컨트롤과 안전하게 상호 작용할 수 있는 유일한 스레드인 UI 스레드로 작업이 마샬링됩니다.
코드 샘플
다음 코드를 고려하세요. Invoke 메서드를 사용하여 별도의 스레드에서 TextBox에 쓰는 방법을 보여주는 샘플:
public partial class Form1 : Form { public Form1() { InitializeComponent(); new Thread(SampleFunction).Start(); } public void AppendTextBox(string value) { if (InvokeRequired) { // Invoke the AppendTextBox method if the current thread is not the UI thread. this.Invoke(new Action<string>(AppendTextBox), new object[] { value }); return; } textBox1.Text += value; } void SampleFunction() { for (int i = 0; i < 5; i++) { AppendTextBox("hi. "); Thread.Sleep(1000); } } }
여기서 코드:
위 내용은 비 UI 스레드에서 C# Windows Forms TextBox를 안전하게 업데이트하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!