현재 네트워크의 데이터를 수신하고 규칙을 실행하는 스레드가 있습니다. 그런 다음 GUI에 데이터를 전달하려고합니다. GUI에서 교착 상태가 발생할까봐 걱정됩니다. GUI 측면에서 뮤텍스를 넣는 것이 불가능하다는 것을 알아 냈습니다. 나는 또한 C# 및 dotnet 3.5를 사용하고있다.Winform은 다중 스레드 또는 이벤트 타이머를 사용해야합니까?
내가 뭘 생각해 냈는지는 입니다. 1) 타이머를 사용하여 이벤트를 만들고 스레드를 덤프하십시오. 성능이 걱정됩니다. 2) 중간 이벤트를 사용하여 데이터를 GUI에 복사하십시오. 3) GUI를 사용하여 스레드로부터 안전한 방법을 찾아서 찾아냅니다.
진행하는 가장 좋은 방법은 무엇이라고 생각하십니까?
편집 : 여기 제가 사용하고있는 해결책이 있습니다. 변경된 요소를 전달한 다음 큰 객체를 뮤텍스로 보호합니다. InvokeRequired를 사용하여 스레드를 전환 한 다음 BeginInvoke를 대리자와 교환하기 위해 도우미 함수를 사용합니다. 답변을 읽은 다음 Threading in Windows Forms에 도달 할 때까지 Jon Skeet에 따라 링크를 클릭합니다.
delegate void UInt32ParameterDelegate(UInt32 n);
public void UpdateLocation(UInt32 n)
{
if (InvokeRequired)
{
// We're not in the UI thread, so we need to call BeginInvoke
BeginInvoke(new UInt32ParameterDelegate(UpdateLocation), new object[] { n });
return;
}
// Must be on the UI thread if we've got this far
this.engine.location.UpdateBusy.WaitOne();
// do the work in here
this.engine.location.UpdateBusy.ReleaseMutex();
}
.net 2.0을 사용하고 있습니까? – JoshBerke