eventwaithandle이 기다리고 있는지 여부를 감지하는 방법은 무엇입니까?
-
19-09-2019 - |
문제
Access를 동기화하기 위해 여러 장소에서 EventwaithAndle을 사용하는 상당히 잘 다중 스레드 Winforms 앱이 있습니다.
그래서 나는 이것과 비슷한 코드를 가지고 있습니다.
List<int> _revTypes;
EventWaitHandle _ewh = new EventWaitHandle(false, EventResetMode.ManualReset);
void StartBackgroundTask() {
_ewh.Reset();
Thread t = new Thread(new ThreadStart(LoadStuff));
t.Start();
}
void LoadStuff() {
_revTypes = WebServiceCall.GetRevTypes()
// ...bunch of other calls fetching data from all over the place
// using the same pattern
_ewh.Set();
}
List<int> RevTypes {
get {
_ewh.WaitOne();
return _revTypes;
}
}
그럼 난 그냥 전화 해 .RevTypes
UI의 sodewehre는 언제 나에게 데이터를 반환 할 것입니다. LoadStuff
실행을 마쳤습니다.
그러나이 모든 것이 완벽하게 올바르게 작동합니다 RevTypes
단지 하나의 속성입니다. 실제로 수십 개가 있습니다. 그리고 이러한 특성 중 하나 또는 몇 개가 UI가 빠르게로드되는 것을 막고 있습니다.
벤치 마크 코드를 각 속성에 배치하지 않으면 UI가 로딩에서 어떤 속성을 보유하고 있는지 확인할 수있는 방법이 있습니까? EventWaithAndle이 실제로 기다려야하는지 확인하는 방법이 있습니까?
해결책
나는 당신이 무엇을 어떻게 달성하고 싶은지 잘 모르겠지만, 당신은 WaitHandle
시간 초과가있는 s 0
현재 설정되어 있는지 확인하려면 다음과 같습니다.
class Program
{
static void Main(string[] args)
{
EventWaitHandle[] waitHandles = new EventWaitHandle[3];
for (int i = 0; i < 3; i++)
{
waitHandles[i] = new EventWaitHandle(false, EventResetMode.ManualReset);
}
waitHandles[1].Set();
for (int i = 0; i < 3; i++)
{
if (waitHandles[i].WaitOne(0))
{
Console.WriteLine("Handle {0} is set", i);
}
else
{
Console.WriteLine("Handle {0} is not set", i);
}
}
}
}
제휴하지 않습니다 StackOverflow