멀티 스레드 프로그래밍을 사용하면 여러 작업을 동시에 수행할 수 있습니다. 여러 스레드가 기본 UI 스레드와 동시에 실행되는 경우 해당 실행을 동기화해야 합니다. 한 가지 방법은 실행을 계속하기 전에 스레드가 완료될 때까지 기다리는 것입니다.
다음 코드 조각을 고려하세요.
<code class="language-csharp">public void StartTheActions() { Thread t1 = new Thread(new ThreadStart(action1)); t1.Start(); // 在启动t2之前等待t1完成。 // 创建一个用作通知机制的事件。 }</code>
다른 스레드가 완료될 때까지 기다리려면 몇 가지 작업을 수행할 수 있습니다.
<code class="language-csharp">t1.Join();</code>
이 메서드는 지정된 스레드가 실행을 완료할 때까지 현재 스레드를 차단합니다.
<code class="language-csharp">ManualResetEvent waitEvent = new ManualResetEvent(false); // 启动线程并传递等待事件。 Thread t1 = new Thread(() => { action1(); waitEvent.Set(); }); t1.Start(); // 等待线程完成。 waitEvent.WaitOne();</code>
<code class="language-csharp">public event EventHandler ThreadDone; // 启动线程并添加事件处理程序。 Thread t1 = new Thread(() => { action1(); ThreadDone?.Invoke(this, EventArgs.Empty); }); t1.Start(); // 通过注册事件处理程序来等待线程。 void WaitForThread() { ThreadDone += (sender, args) => { /* 执行操作 */ }; }</code>
<code class="language-csharp">public delegate void ThreadDoneHandler(); // 启动线程并传递用于通知的委托。 Thread t1 = new Thread(() => { action1(); threadDone?.Invoke(); }); t1.Start(); // 通过注册委托来等待线程。 ThreadDoneHandler threadDoneHandler = () => { /* 执行操作 */ }; threadDoneHandler += delegate { threadDoneHandler = null; };</code>
<code class="language-csharp">Task<int> task = Task.Run(() => { return action1(); }); // 等待任务完成。 int result = task.Result;</code>
선택하는 방법은 애플리케이션의 특정 요구 사항에 따라 다릅니다. 다른 스레드가 완료될 때까지 현재 스레드를 차단해야 하는 경우 Thread.Join()
가 아마도 가장 적절한 옵션일 것입니다. 스레드를 차단하지 않으려면 이벤트, 대리자 또는 비동기 작업과 같은 다른 기술을 사용할 수 있습니다.
위 내용은 .NET에서 스레드가 완료될 때까지 어떻게 기다릴 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!