E>В общем вот это я вынес отдельный поток
E>E>static UINT LoadSrc(LPVOID pParam)
E>{
E> THREAD* pLoad = (THREAD*)pParam;
E> pLoad->pSink->ReportProgress(BINDSTATUS_CONNECTING, pLoad->sUrl);
E> pLoad->pSink->ReportProgress(BINDSTATUS_SENDINGREQUEST, pLoad->sUrl);
E> pLoad->pSink->ReportProgress(BINDSTATUS_BEGINDOWNLOADDATA, pLoad->sUrl);
E> pLoad->BD->Send(pLoad->sUrl);
E> CString ct = pLoad->BD->GetRawHeader(_T("Content-Type:"));
E> pLoad->pSink->ReportProgress(BINDSTATUS_VERIFIEDMIMETYPEAVAILABLE, ct);
E> pLoad->pSink->ReportData(BSCF_DATAFULLYAVAILABLE, 0, pLoad->BD->m_ulDataLen);
E> pLoad->pSink->ReportResult(S_OK,0,NULL);
E> return 0;
E>}
E>
E>Как и следовало ожидать, ничего не изменилось. Все равно браузер два раза вызывает метод Start в разных потоках. Наблюдается такая ситуация, если в Start просто вернуть S_OK, то браузер виснет. Если вызвать ReportData или ReportResult, то Start вызывается второй раз в другом потоке и следовательно вызываются все остальные методы и как следствие страница не найдена и ошибки.
E>Может у кого есть рабочий код асинхронного протокола?
Как не стыдно признавать, но ошибка у меня была в другом месте. Неправильно получал mime-тип. Вот из-за этого и вылазили ошибки. Вышеприведенный код работает нормально, пока глюков не замечал. Можно выводить его как в отдельный поток, так и в методе Start.