첨부 된 이미지와 같이 나타나는 양식이 있습니다. 이 질문에 관련된 두 부분 : TabControl 및 Panel (이미지에 표시된대로)이 있습니다. 패널은 TabControl 안에 있지 않습니다.스레드를 중지하고 UI 이벤트를 처리하도록 허용 한 다음 스레드를 "다시 시작"하시겠습니까?
내 상황은 패널에서 녹색으로 녹아서 표시된 버튼을 클릭 할 때 지속적으로 실행되는 스레드가 있다는 것입니다. 스레드는 내가 인터페이스하는 장치를 폴링하고 TabControl의 아래쪽에있는 "Status"GroupBox의 컨트롤을 업데이트합니다. 사용자가 TabControl (tabControl_Enter
이벤트)에서 컨트롤을 클릭하면 클릭 한 컨트롤에 필요한 IO를 수행 할 수 있도록 스레드가 반복을 마칠 수있게하는 ManualResetEvent를 트리거합니다. 스레드를 일시 중단하는 코드는 다음과 같습니다 : 나는 현재 수행으로, 버튼을 누를 때 대신, 자동으로 스레드를 다시 시작하면됩니다 싶습니다 무엇
private void StopSynchThread()
{
synchWaitHandle.Reset();
//various UI changes
}
private void updateSynchStat()
{
while (true)
{
synchWaitHandle.WaitOne();
try
{
updateSynch();
}
}
. 내가 뭘 하려는지 조건부로 각 "bazillion"UI 이벤트 처리기 내에서 StartSynchThread()
호출하여 스레드를 다시 시작하지 않아도됩니다.
private void StartSynchThread()
{
synchWaitHandle.Set();
}
이 문제를 처리하기위한 선례 또는 괜찮은 패러다임이 있습니까 : StartSynchThread()
는 다음과 같이 정의된다? 그렇게하는 방법에 대한 개념이 없으면 디바이스에서 IO를 수행하는 기능을 디바이스에서 응답을 얻은 후에 이벤트를 생성하는 기능을 변경할 수 있다고 생각하고있었습니다.하지만 이는 비 효과적으로 보입니다.
아이디어가 있으십니까? 당신의 통찰력에 감사드립니다. 감사.
완벽하게 간단한 해결책입니다. 정확히 내가 원하는 것. 버튼 누름기를위한 핸들러는 시작/멈춤에 대한 작은 논리를 처리하므로 충분히 쉽게 사용할 수 있습니다. 감사. –