C# Winform多線程操做控件代碼

首先定義一個委託,用於處理控件顯示邏輯web

  private delegate void UpdateLabelCallback(String info);併發

在定義一個利用委託來處理邏輯的方法網站


        private void UpdateLabel(String info)
        {
            //this.lab_fileinfo.Text = info ;ui

            if (this.lab_fileinfo.InvokeRequired)//若是調用控件的線程和建立建立控件的線程不是同一個則爲True
            {
                while (!this.lab_fileinfo.IsHandleCreated)
                {
                    if (this.lab_fileinfo.Disposing || this.lab_fileinfo.IsDisposed)
                    {
                        return;
                    }
                }
                UpdateLabelCallback callback = new UpdateLabelCallback(UpdateLabel);
                this.lab_fileinfo.Invoke(callback, new object[] { info });
            }
            else {
                this.lab_fileinfo.Text = info;
            }this

        }spa

最後再須要的地方,調用該方法線程

 UpdateLabel("正在修改標籤");xml

完成。對象

因爲開發中使用了webclient   這裏再說說webclient的一些問題。開發

DownloadAsync   這個方法要慎用,因爲工程有點複雜,有的地方使用這個方法會提示 webclient不支持併發i/o操做。 所以改用了Download方法

 

補充說明: DownloadFileAsync  這個方法可使用,咱們在工程裏面封裝了一下,命名爲DownloadAsync ,出現webclient不支持併發i/o操做的問題,不是由於這個方法,而是在下載文件的時候,重用了webclient對象,在循環中從新構建webclient對象便可。 

這裏,還加個小知識點,獲取當前程序路徑的方法代碼

System.Environment.CurrentDirectory;

另外,因爲iis默認不容許下載.config文件,因此客戶端的配置.config沒法下載,出現了問題:

HTTP 錯誤 404.7 - Not Found

請求篩選模塊被配置爲拒絕該文件擴展名。

須要修改配置,具體修改方法以下

在iis中,找到請求篩選,會列出全部設置的擴展名和規則

找到.config擴展,將其刪除

重啓網站   .config文件就能夠正常訪問了。

 

最後來個總結

1.自動更新程序,不能單獨使用一個exe文件,即便是兩個exe文件,負責更新做用的exe文件也不能有被更新的依賴項,不然會出現錯誤:「無訪問已關閉的文件」
2.出現 「文件所在的卷已被外部更改,所以打開的文件再也不有效。」問題,是因爲.exe.config文件沒有數據,字節數爲0致使的。 
  解決的辦法,是讓iis支持.config文件下載, 1是在請求篩選中刪除.config配置  2是在mine-type中添加.config 的配置,值爲 text/xml
3.webclient下載多個文件的時候,必須在循環體內建立新的對象,不然會出現問題:「webclient不支持併發i/o操做」
 

 

本博客文章大可能是經驗積累總結,以避免從此忘卻,記錄下來。同時感謝您的閱讀,也但願能對您有所幫助。

相關文章
相關標籤/搜索