원래 네이티브 코드로 작성되었으며 .net interops로 래핑 된 API를 사용하고 있습니다. API는 비동기식으로 작동합니다. 각 작업이 완료되면 이벤트가 발생합니다. 모든 논리가 동기화되어 있으므로 작업을 동기화하고 싶습니다. 나는 EventWaitHandle로 그것을하고있다. 여기 _signal.WaitOne() 라인에 갇혀 코드하나의 com 객체 기반 이벤트 동기화
Stock stock;
private System.Threading.EventWaitHandle _signal = null;
public void Sync()
{
_signal = new System.Threading.EventWaitHandle(false,
System.Threading.EventResetMode.AutoReset);
MBTradingProvider.Instance.FinnishGetStoch += new
EventHandler(Instance_FinnishGetStoch);
MBTradingProvider.Instance.GetStockAsync("IBM");
_signal.WaitOne();
}
void Instance_FinnishGetStoch(object sender, EventArgs e)
{
stock = MBTradingProvider.Instance.CurrentWorkongStock;
if (_signal != null)
_signal.Set();
}
이 코드는, 현재의 thread가 정지하고 아무 일도 할 수있다. 다른 비동기 작업에서 같은 패턴으로 작업했는데 정상적으로 작동합니다. 내가 생각할 수있는 유일한 차이점은 두포가 com 객체를 처리한다는 것입니다. 내가 얻은 효과는 WaitOne 행 다음에 코드가 응답하지 않는다는 것입니다.
누구나 잘못된 생각 일 수 있습니까?
안녕하세요. 해결책을 얻지 못했습니다. 내가 알기로는 모든 스레드가 내 EventWaitHandle (_signal)을 볼 수있는 것은 아닐 수 있습니다. 이 코드가 로컬 "temp"EventWaitHandle을 사용하는 것이 어떻게 정착하는지 이해할 수 없습니까? 더 자세히 설명해 주시겠습니까? 다른 비동기 작업을 호출 할 때 동일한 코드를 사용 했으므로 제대로 작동합니다. 이 두 가지 경우에 사용되는 비동기 프레임 워크에는 차이가있을 수 있습니까? 감사합니다. . –