[英]c# DocumentLoadedEvent not firing
我希望我的程序從網站獲取國際空間站的緯度和經度,所以我有以下代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Threading;
using System.Speech.Synthesis;
using System.Windows.Forms;
using System.Net;
namespace myprogram
{
class Program
{
static void Main(string[] args)
{
try
{
WebBrowser browser1 = new WebBrowser();
browser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
browser1.Url = new Uri("https://isstracker.spaceflight.esa.int/");
browser1.Visible = true;
browser1.ScrollBarsEnabled = false;
browser1.ScriptErrorsSuppressed = true;
browser1.AllowNavigation = false;
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Main(null); //don't know if this is the best way to keep the program from closing
}
static void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Console.WriteLine("iss page loaded");
if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
return;
string lat = (sender as WebBrowser).Document.GetElementById("isst_lat").InnerText;
string lon = (sender as WebBrowser).Document.GetElementById("isst_lon").InnerText;
Console.WriteLine("latitude is" + lat + ",longitude is" + lon);
}
}
}
當我運行程序時, WebBrowserDocumentCompletedEvent
不會觸發。 我一直在尋找解決方案,但還沒有找到。 如果有人有靈魂,請提前感謝您。
伙計,您的程序實際上在它退出之前就退出了,它會觸發“文檔加載”事件,甚至會引發堆棧溢出異常(不是 rly ......它超出了最大調用堆棧,我猜......不記得了) .
現在,回答你的問題:
第一個。 看,您的程序是控制台應用程序,而不是 Windows Forms 應用程序。 檢查它們之間的區別( https://docs.microsoft.com/pt-br/dotnet/csharp/tutorials/console-teleprompter和https://docs.microsoft.com/en-us/windows/uwp/ launch-resume/app-lifecycle )並注意它們的方式不同。 因此,如果您想自己查看 web 瀏覽器,您應該使用 windows forms 應用程序。 相反,如果您只是願意解析和轉換 Web 請求的響應(我猜這里就是這種情況),請搜索“WebClient.DownloadString Tutorial”並享受。 ;)
第二。 這不是阻止程序關閉的最佳方法...既然您已經評論過它(“//不知道這是否是阻止程序關閉的最佳方法”)我會為您指出一些明確方向...
早在我們程序員過去常常在軟木密封的瓶子里喝蘇打水,騎馬,打獵我們的食物和東西的日子里,程序曾經被稱為“命令提示符”......就像 git bash 你需要知道命令在“無用戶界面”環境中使用它們......
是的! 沒有USER INTERFACE ,您必須真正鍵入每個命令(例如單擊按鈕),並在一行中傳遞參數(例如,您放入文本框中的內容,或選中 state 的復選框)以執行任何操作。 ., 就像永遠一樣,但傷疤(經驗教訓)仍然存在!
防止控制台關閉的一種方法(不能告訴你“最好的”。當然可以告訴你我最喜歡的那個。)是聽命令。,當用戶輸入文本行時。 你檢查這行是否是一個有效的命令,如果不是,告訴他。 如果用戶輸入您的有效“退出”命令。 它關閉了。:. (提示:單詞“While”和“If”是要實現的實際編程模式)
所以,這是一個“指南答案”,而不是“編程自己完成”......如果你需要它,只需在這里評論,我可以為你試一試......只是一個建議:這是更好的學習而不是被別人的幫助所束縛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.