.NET網站自動瀏覽器分享,解決IIS6應用池回收后第一次訪問慢問題


.NET開發的網站,如果不是使用預編譯發布,網站會在iis6應用池回收后第一次訪問很慢,為了解決這個問題,今天寫了一個自動瀏覽的工具,現在分享給大家,界面如下。

 

 關鍵部分源碼

        //手動點擊瀏覽
        private void btnBrowsing_Click(object sender, EventArgs e)
        {
            if (btnBrowsing.Enabled == true && chkEnableAutomaticBrowsing.Checked == true)
            {
                btnBrowsing.Enabled = false;
                Thread thread = new Thread(new ThreadStart(AutoBrowsing));
                thread.IsBackground = true;
                thread.Start();
            }
            else
            {
                MessageBox.Show("任務正在執行!");
            }
        }

        DateTime tempTime = DateTime.MinValue;//防止一分鍾內刷新多次

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now;

            //轉鍾時清除一天日志
            if (dt.ToLongTimeString() == "0:00:00")
            {
                rtxtLogs.Text = string.Empty;
            }

            TimeSpan ts = dt - tempTime;
            //1分鍾內不得刷新兩次
            if (ts.TotalMinutes > 0)
            {
                //到點自動刷新
                if (lstTime.Items.Contains(dt.ToShortTimeString()))
                {
                    tempTime = dt.AddMinutes(1);
                    btnBrowsing_Click(null, null);
                }
            }
        }

        private void AutoBrowsing()
        {
            int itemTotalCount = 0;
            CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
            {
                itemTotalCount = lvWebsitInfo.Items.Count;
            }));
            for (int i = 0; i < itemTotalCount; i++)
            {
                string url = string.Empty;
                CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
                {
                    url = lvWebsitInfo.Items[i].SubItems[2].Text;
                }));
                int retry = 0;
            retryFlag:
                CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                {
                    webBrowser1.Navigate(url);
                }));
                if (WaitWebPageLoad())
                {
                    CrossThreadCalls.SafeInvoke(this.rtxtLogs, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        rtxtLogs.AppendText(url + "瀏覽成功,瀏覽時間:" + DateTime.Now.ToLongTimeString() + "\r\n\r\n");
                        rtxtLogs.ScrollToCaret();
                    }));
                    CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        lvWebsitInfo.Items[i].SubItems[3].Text = DateTime.Now.ToString();
                    }));
                }
                else
                {
                    CrossThreadCalls.SafeInvoke(this.rtxtLogs, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        rtxtLogs.AppendText(url + "瀏覽失敗,即將重試" + (retry + 1) + "次\r\n");
                        rtxtLogs.ScrollToCaret();
                    }));
                    if (retry < 2)//重試3次
                    {
                        retry++;
                        Thread.Sleep(3000);
                        goto retryFlag;
                    }
                    CrossThreadCalls.SafeInvoke(this.rtxtLogs, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        rtxtLogs.AppendText(url + "瀏覽失敗\r\n\r\n");
                        rtxtLogs.ScrollToCaret();
                    }));
                    CrossThreadCalls.SafeInvoke(this.lvWebsitInfo, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        lvWebsitInfo.Items[i].SubItems[3].Text = "自動瀏覽失敗";
                    }));
                }
            }
            CrossThreadCalls.SafeInvoke(this.btnBrowsing, new CrossThreadCalls.TaskDelegate(delegate()
            {
                btnBrowsing.Enabled = true;
            }));
            CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
            {
                webBrowser1.Navigate("about:blank");
            }));
        }

        /// <summary>
        /// 判斷webbrowser是否加載一個網頁完畢,可判斷包括iframe的網頁
        /// </summary>
        /// <returns></returns>
        private bool WaitWebPageLoad()
        {
            int i = 0;
            string sUrl = string.Empty;
            while (true)
            {
                Thread.Sleep(2000);
                WebBrowserReadyState webBrowserState = WebBrowserReadyState.Uninitialized;
                CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                {
                    webBrowserState = webBrowser1.ReadyState;
                }));
                if (webBrowserState == WebBrowserReadyState.Complete) //先判斷是否發生完成事件。
                {
                    bool isBusy = true;
                    CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                    {
                        isBusy = webBrowser1.IsBusy;
                    }));
                    if (!isBusy) //再判斷是瀏覽器是否繁忙
                    {
                        i = i + 1;
                        if (i == 2)
                        {
                            CrossThreadCalls.SafeInvoke(this.webBrowser1, new CrossThreadCalls.TaskDelegate(delegate()
                            {
                                sUrl = webBrowser1.Url.ToString();
                            }));
                            if (sUrl.Contains("res") || sUrl.Contains("daohang.114so.cn")) //這是判斷沒有網絡的情況下
                            {
                                return false;
                            }
                            else
                            {
                                return true;
                            }
                        }
                        continue;
                    }
                    i = 0;
                }
            }
        }

最新源碼下載

點擊下載C#V1.1源碼

 

歷史源碼下載

點擊下載C#V1.0源碼

 

更新日志:

2014-8-13

1.修復網站加載完畢有時候判斷失敗問題。

2.修復cpu占用很高問題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM