通用進度條的設計與實現 C

2021-04-19 04:01:33 字數 3057 閱讀 4613

首先,通用進度條類的實現
public partial class progressshow : form

public progressshow(iprogressbar progressbar)

#endregion

/// /// 執行緒處理方法

///

private void handlethreadproc()

//退出執行緒

_handlethread.abort();

}catch (exception ex)

finally

setprogressbarvalue(pgbar, pgbar.maximum - 1);

setlabeltext(lbprogress, "99%");}}

#region 設定label的方法

/// /// 設定label狀態

///

/// /// private void setlabeltext(system.windows.forms.label lb, string text));}

else

}catch

}private void setlabeltextinvoke(system.windows.forms.label lb, string text)

#endregion

#region 進度條設定方法

/// /// 設定進度條

///

/// /// private void setprogressbarvalue(system.windows.forms.progressbar pgb, int value));}

else

}catch (exception ex)

}private void setprogressbarvalueinvoke(system.windows.forms.progressbar pgb, int value)

#endregion

/// /// 定時器,用於處理進度條

///

/// /// private void timerprogress_tick(object sender, eventargs e)

else

else}}

else

}/// /// form初始化方法

///

/// /// private void progressshow_load(object sender, eventargs e)

/// /// 視窗關閉時呼叫的方法

///

/// /// private void progressshow_formclosed(object sender, formclosedeventargs e)

}說明1、由於本進度條類要處理介面顯示以及相應的業務方法(該方法依據不同的業務需求可以隨時變化,只要相應的業務類繼承介面iprogressbar實現介面方法即可),並且這兩個工作要並行進行,因此程式開啟了乙個新的處理業務方法的執行緒,而介面顯示的處理由timer事件去處理

2、因為本進度條為通用進度條,我們並不知道以後要處理什麼樣的業務方法,這種情況下我們有兩種選擇來處理。

其一,使用**機制,客戶將業務方法傳入,在通用進度條類中使用該**,從而呼叫這個外部可變的業務方法。

其二,使用介面,在繼承該介面的類物件中實現介面方法,也就是業務方法。並且將介面傳入,通過呼叫介面方法來呼叫外部的業務方法。

由於我們需要一些必須的變數,只通過引數記錄有些笨拙,因此最後選擇了第二種方法——介面

其次,iprogressbar介面:

public inte***ce iprogressbar

第三,通過刪除檔案操作予以說明:

public class deletelogfile : iprogressbar

#endregion

public bool progres**ethod()

else

case type.report:

int limit = (int)_para[0];

return deletedbreport(limit);

case type.compression:

return compressiondbfile();

default:

return false;}}

/// /// 刪除指定日期以前的過期資料夾,子資料夾和檔案

///

/// 目標目錄

/// 過期時間

private bool deletetempfiles(string tempdirectory, datetime dtbefore)

else}}

retbool = true;

}catch (exception ex)

return retbool;

}private bool deletedbreport(int limit)

catch (sqlexception ex)

finally

return result;

}private bool compressiondbfile()

catch (exception)

finally

return result;}}

最後,通用進度條的使用

iprogressbar progressbar = new deletelogfile(type.compression);

progressshow pro = new progressshow(progressbar);

if (pro.showdialog() == dialogresult.ok)

else

//說明: 想要使用通用進度條的使用者首先要實現iprogressbar介面,以該介面物件構造出progressshow物件。

//而iprogressbar介面中的bool progres**ethod()方法用於處理相應的業務邏輯。例如要刪除某路徑的檔案,

//則可以在實現該介面的類中相應方法內些相應的刪除檔案方法,當全部刪除完成時,返回true。

C 進度條實現

namespace progress namespace progress public mainfrm private void button1 click object sender,eventargs e private void handlethread 執行緒處理函式,實現耗時任務 cla...

進度條的實現

1 實現要求 的數量在不斷地增加,後面的數字也隨著增加,圖示不停地在旋轉 2 用到的基礎知識 n 換行 lf 將當前位置移到下一行開頭 r 回車 cr 將當前位置移到本行開頭,每次游標會回到行首 代表乙個反斜線字元 0 空字元 null 3 程式的實現 index裡面是圖示的實現,100s 是左端對...

進度條的實現

include include int main char ch printf 033 25l 033 47m printf 58s r fflush stdout int i 0 while i 50 printf 033 31m 033 58c ok 033 0m printf n 033 25...