人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統 > 網絡技術教程 > 詳細頁面

編程手段動態檢測連接十分耗時,主線程的一切設置

編程手段動態檢測連接十分耗時,主線程的一切設置

更新時間:2023-08-27 文章作者:未知 信息來源:網絡 閱讀次數:

網絡故障(network failure)是指由于硬件的問題、軟件的漏洞、病毒的侵入等引起網絡無法提供正常服務或降低服務質量的狀態。

如今,桌面程序不再像以前那樣完全獨立于網絡,并且各種功能都與Internet連接密不可分。程序通常需要Internet連接來執行諸如自動更新,WebService調用等操作以訪問遠程數據,但是在實際訪問遠程數據之前,我們最好確保遠程連接可用,以便程序的過程和健壯性程序可以是很了不起的。通過編程方式動態檢測Internet連接非常耗時,因此,如果不使用多線程,則程序接口將在檢測期間死鎖,并且檢測連接占用了主線程的所有操作。當檢測到遠程連接是否可用時,主界面經常死鎖,并不是良好的用戶體驗。在本文中,我們將為這個問題創建一個C#組件。主要目標是創建一個用于測試遠程連接的標準框架。該測試必須是多線程的,并且必須在后臺執行。成功檢測到連接后,必須通知它。主線程會對連接可用的情況做出反應,例如打開網頁,開始自動更新以及開始調用WebService。

利用backgroundworker檢測網絡連接

在開始之前,我們需要列出項目需要使用的相關技術。

在檢測Internet連接的方法中,我們采用了不同的策略。可以想象,任何客戶端程序在需要連接到Internet時都必須具有一個地址。該地址不過是一個IP地址或域名和端口數據。客戶端程序通過該地址與遠程主機建立連接以進行數據交換。然后,我們的客戶端程序將直接檢測該地址是否可用,以近似估算Internet連接是否可用。地址可用性證明Internet連接也可用,而地址不可用性證明兩點:1、地址無效; 2、 Internet連接不可用。但是地址無效的可能性很小。首先,程序員不可能為客戶端程序提供一個無效的地址來嘗試連接,然后服務器端癱瘓的可能性就很小,例如嘗試連接或。

好的,讓我們開始創建檢測組件。

首先我們創建一個Windows窗體應用程序,然后添加一個組件,這些過程將不再詳述。我們將新組件命名為InternetConnection,首先定義兩個私有字段:BackgroundWorker類型的bgworker和字符串類型的可靠的URL。然后定義兩個屬性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

public string ReliableURL
{
get { return reliableURL; }
set { reliableURL = value; }
}

public bool Active
{
set
{
if (value == true)
{
bgworker.RunWorkerAsync();
}
else
{
bgworker.CancelAsync();
}
}
}

ReliableURL屬性是我們前面提到的所謂的遠程地址。我們通過訪問可靠的地址或我們自己的Web服務地址來間接檢查Internet連接是否可用。 Active屬性允許控制BackgroundWorker的異步執行狀態,并且通過將該組件的Active屬性設置為true來啟動后臺Internet連接檢測。

利用backgroundworker檢測網絡連接_微信連接失敗無法連接服務器請檢查你的網絡_lol連接錯誤 無法連接服務器 請檢查您的網絡

接下來,我們需要定義事件。為了簡單起見,我們為此組件定義了兩個事件Connected和ConnectFailure。前者是成功連接后觸發的事件,后者是由于連接失敗觸發的事件。我們的事件不需要傳遞參數。有關事件的更多詳細信息,請參閱我的另一篇博客文章:.Net事件和代表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

public event EventHandler Connected;
public event EventHandler ConnectFailure;

protected virtual void OnConnected(EventArgs e)
{
if (Connected != null)
{
Connected(this, e);
}
}

protected virtual void OnConnectFailure(EventArgs e)
{
if (ConnectFailure != null)
{
ConnectFailure(this, e);
}
}

接下來,我們創建代碼以檢測連接。有關使用BackgroundWorker的更多方法,請參閱MSDN或我的另一篇博客文章:實用.Net多線程(三)和實用.Net多線程(四))。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(reliableURL);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (HttpStatusCode.OK == response.StatusCode)
{
response.Close();
e.Result = true;
}
else
{
e.Result = false;
}
}
catch (WebException)
{
e.Result = false;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
throw e.Error;
}
else
{
if ((bool)e.Result) // Online
{
OnConnected(e);
}
else // Offline
{
OnConnectFailure(e);
}
}
}

微信連接失敗無法連接服務器請檢查你的網絡_利用backgroundworker檢測網絡連接_lol連接錯誤 無法連接服務器 請檢查您的網絡

最后,在組件的初始化方法中實例化相關的私有字段。

1
2
3
4
5
6
7
8
9
10

public InternetConnection(IContainer container)
{
container.Add(this);
InitializeComponent();
bgworker = new BackgroundWorker();
bgworker.WorkerReportsProgress = false;
bgworker.WorkerSupportsCancellation = false;
bgworker.DoWork += new DoWorkEventHandler(this.BackgroundWorker_DoWork);
bgworker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.BackgroundWorker_RunWorkerCompleted);
}

創建組件后,編譯整個解決方案,打開最初創建的項目WindowsFormsApplication1的Form1窗體,我們將在VS IDE的工具箱中找到剛創建的名為InternetConnection的組件,并將其拖到Form1上。窗體中,有一個類型為internetConnection1的實例。我們在窗體上放置一個Button,一個WebBrowser和一個StatusStrip,并將StatusLabel添加到StatusStrip。我們使用WebBrowser來顯示特定的網頁,以指示Internet連接可用。

選擇internetConnection1,我們將發現它暴露了兩個事件,我們為這兩個事件添加了相應的處理代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13

private void internetConnection1_Connected(object sender, EventArgs e)
{
toolStripStatusLabel1.Image = Properties.Resources.Online;
toolStripStatusLabel1.Text = "已連接到 Internet,正在打開 it168.com 網頁....";
webBrowser1.Navigate("http://www.it168.com/");
}

private void internetConnection1_ConnectFailure(object sender, EventArgs e)
{
toolStripStatusLabel1.Image = Properties.Resources.Offline;
toolStripStatusLabel1.Text = "未連接到 Internet";
webBrowser1.Navigate(Application.StartupPath + "\\Error.html");
}

連接成功后,將顯示一個遠程網頁,并在失敗時顯示一個自定義的HTML文件。如下圖所示:

利用backgroundworker檢測網絡連接_微信連接失敗無法連接服務器請檢查你的網絡_lol連接錯誤 無法連接服務器 請檢查您的網絡

利用backgroundworker檢測網絡連接

利用backgroundworker檢測網絡連接

將相應的代碼添加到WebBrowser的DocumentCompleted事件中,以響應網頁加載的完成:

1
2
3
4

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
toolStripStatusLabel1.Text = "完成";
}

最后,在Button的click事件中添加代碼以啟動測試連接:

1
2
3
4
5
6
7

private void button1_Click(object sender, EventArgs e)
{
internetConnection1.ReliableURL = "http://www.google.cn"; //要檢測的網絡連接
internetConnection1.Active = true;
toolStripStatusLabel1.Image = Properties.Resources.Searching;
toolStripStatusLabel1.Text = "正在嘗試連接遠程服務器....";
}

此時,已創建了一個自定義Internet連接組件。該程序已在Windows SP3 + Visual Studio 2008 SP1的環境下成功編譯和調試。


本文來自本站,轉載請注明本文網址:
http://www.pc-fly.com/a/tongxingongju/article-362771-1.html


當今,越來越多的業務應用運行于網絡架構之上,保障網絡的持續、高效、安全的運行,成為網絡管理者面臨的巨大挑戰。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 辉南县| 囊谦县| 金塔县| 丰镇市| 大荔县| 卢龙县| 紫金县| 龙海市| 丹江口市| 张家口市| 洞头县| 科技| 江陵县| 张家港市| 白山市| 威宁| 龙州县| 鸡西市| 文山县| 会昌县| 陇川县| 辽中县| 呈贡县| 房产| 运城市| 朔州市| 沁水县| 沭阳县| 济宁市| 江达县| 道真| 怀柔区| 昌平区| 巴里| 施秉县| 治县。| 吉安县| 陵水| 迁西县| 蓬溪县| 寿宁县|