좋습니다. 목표는 웹 페이지가 업데이트 된시기를 감지하고 업데이트 된 페이지를 WebBrowser 컨트롤에 표시하는 것입니다. 예를 들어, 아마존이 플레이 스테이션 4를 현재 사용할 수있게 할 것이라는 것을 알고 있다고 말하지만, 나는 언제 알지 못한다. 내 양식에 아마존 PS4 페이지의 주소를 넣고, 프로그램은 주기적으로 그 페이지에 WebBrowser를 시작하고 HTML을 문자열 목록에 저장합니다. 다음 번에 브라우저를 실행하면 내 목록과 비교하여 결과를 확인할 것입니다. 목록에 이미이 특정 문자열이 포함되어 있으면 WebBrowser가 닫히고 Thread.Sleep을 사용하여 다시 대기합니다.WebBrowser 및 Thread.Sleep oddity (WebBrowser 컨트롤 대신 기본 브라우저가 시작됨)
private void Launch()
{
while (blnWorking)
{
if (intWindowCount < intMaxCount)
{
ShowBrowserUri(GetBrowserUri());
}
if (intWait > 0)
Thread.Sleep(intWait);
}
}
delegate void ShowBrowserUriDelegate(Uri uri);
private void ShowBrowserUri(Uri uri)
{
if (InvokeRequired)
{
ShowBrowserUriDelegate del = new ShowBrowserUriDelegate(ShowBrowserUri);
Invoke(del, uri);
}
else
{
CookieContainer cc = GetUriCookieContainer(uri);
CookieCollection cc1 = new CookieCollection();
if (cc != null)
{
cc1 = cc.GetCookies(uri);
}
THBrowser thb = new THBrowser(uri, cc1, this); //THBrowser is a form with a WebBrowser control
//THBrowser calls the Navigate method of its WebBrowser control
intWindowCount++;
thb.Show();
thb.SendToBack();
}
}
문제는 내 프로그램은 무작위로 파이어 폭스 (기본 브라우저)에서 웹 사이트를 여는 대신 THBrowser/웹 브라우저를 사용하는 것입니다. 나는 밟아 봤고, 나는 Thread.Sleep에서 물러날 때마다 일어나는 것처럼 보인다.
내 WebBrowser의 OnDocumentComplete가 현재 HTML을 HTML 문자열 목록과 비교하고 페이지 내용이 내 목록에 이미 포함되어있는 경우 컨트롤을 닫을 수도 있습니다.
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
return;
if (ResultsList.Contains(this.webBrowser1.Document.Body.InnerHtml)
this.Close();
else
ResultsList.Add(this.webBrowser1.Document.Body.InnerHtml);
}
내가 THBrowser 간단히 열기 때문에이 관련 될 수있는 생각
나는 내 앞에 최신 버전을 가지고 있지 않지만, 그 부분은 같은 간다가 ..., 다음, 사라지는 새로운 탭이 Firefox에서 즉시 열립니다.
나는 Thread.Sleep이 그와 관련이 있다고 확신한다. Thread.Sleep을 도입하기 전에 때때로이 문제를 보았지만 100 배로 증가했습니다.
어쩌면 Thread.Sleep이 내 간격을 배치하는 가장 좋은 방법은 아닙니다. 어쩌면 나는 완전히 완전히 잘못 될 것입니다. 모든 제안을 부탁드립니다.
나는 모든 호출에 대해 WebBrowser가 실제로 필요하지 않습니다. 대신 WebRequest를 사용하고 페이지가 변경된 후에 WebBrowser 만 시작하기로 결정했습니다. 전에 그 경로를 시도했지만 쿠키/세션이 유지되는 데 약간의 문제가있었습니다. 내가 그것을 내려 놓고 돌아 왔을 때 더 잘 작동하고있는 것 같습니다. –
페이지가 Firefox로 전송 된 이유에 대해 궁금한 점이 많습니다. 내가 Thread.Sleep에서 읽고 있었고 내 이론은 자고있는 동안 url이 WebBrowser 객체에 보내지면 Windows는 어떻게 든 기본 브라우저를 백업으로 사용한다는 것입니다. –