首先定義一個委託,用於處理控件顯示邏輯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沒法下載,出現了問題:
須要修改配置,具體修改方法以下
在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操做」
本博客文章大可能是經驗積累總結,以避免從此忘卻,記錄下來。同時感謝您的閱讀,也但願能對您有所幫助。