国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

獲取SharpSvn執行svn操作的實時日志

2019-11-14 13:57:49
字體:
來源:轉載
供稿:網友

1 獲取 SharpSvn 操作日志的方式

之前一篇隨筆(使用 SharpSvn 執行 svn 操作)講到可以通過聲稱一個綁定到一個 SvnClient 對象的 SvnClientReport 對象。為了說明方便,將對應的程序片段再次寫在下面,

using (SvnClient client = new SvnClient()){    StringBuilder strBuilder = new StringBuilder();    SvnClientReporter reporter = new SvnClientReporter(client, strBuilder);}

該程序片段使用一個 StringBuilder 對象來聲稱 SvnClientReport 對象。這樣子,我們只能等到執行 svn 操作之后才能從 StringBuilder 對象中獲取所有操作日志。如果執行的 svn 操作比較耗時(例如 commit 上千個文件),我們不能夠實時地獲取 SharpSvn 執行 svn 操作的日志,我們會以為程序卡住了。那么,如何實時獲取 SharpSvn 操作的日志?

2 實時獲取 SharpSvn 操作日志

首先, 獲取 SharpSvn 執行 svn 操作日志只能通過聲明 SvnClientReport 對象。這是我們的出現點,那么怎樣聲明一個實時獲取操作日志的 SvnClientReport 對象?先看一下 SvnClientReport 類的構造函數(參考http://docs.sharpsvn.net/current/),

SvnClientReporter(SvnClient, TextWriter);

SvnClientReporter(SvnClient, StringBuilder);

SvnClientReporter(SvnClientArgs, TextWriter);

SvnClientReporter(SvnClientArgs, StringBuilder);

SvnClientReporter(SvnClient, StringBuilder, IFormatPRovider);

SvnClientReporter(SvnClientArgs, StringBuilder, IFormatProvider);

通過 SvnClientReport 類的構造函數,我們可以看出我們只能使用一個 StringBuilder 或者 TextWriter 對象來聲明一個 SvnClientReport 對象。上一節我們已經看到通過 StringBuilder 對象是無法實時獲取 SharpSvn 操作日志的了,那我們只能從 TextWriter 下手了。

通過http://msdn.microsoft.com/zh-cn/library/ywxh2328%28VS.80%29.aspx,我們看到 TextWriter 是一個抽象類,那么我們是不是就可以通過定義一個TextWriter 派生類來實現我們實時獲取 SharpSvn 操作日志呢?!

下面實現的 MyRealTimeTextWriter 類繼承了抽象類 TextWriter,實現了屬性 Encoding(必須實現),并且覆蓋實現了 void Write(string) 和void WriteLine(string value) 兩個方法,這兩個方法通過觸發 DataReceived事件告知外界其接收到的數據。

class MyRealTimeTextWriter : TextWriter{    //TextWriter派生類必須實現    public Encoding Encoding    {        get { return Encoding.UTF8; }    }        //接收到數據,就觸發該事件    public event Action<string> DataReceived;    private void OnDataReceived(string value)    {        if (DataReceived != null)        {            DataReceived(value);        }    }     public override void Write(string value)    {        OnDataReceived(value);    }    public override void WriteLine(string value)    {        OnDataReceived(value);    }}

有了 MyRealTimeTextWriter 類之后,我們就可實現下面的程序來實時獲取 SharpSvn 操作的日志。

using (SvnClient client = new SvnClient()){    MyRealTimeTextWriter realtimeTextWriter = new MyRealTimeTextWriter();    realtimeTextWriter.DataReceived += new Action<string>(        delegate (string value)        {            /* do on the sharpsvn Operation logs */        });    SvnClientReporter reporter = new SvnClientReporter(client, realtimeTextWriter);    /* do svn operations  */}

上面程序通過一個 MyRealTimeTextWriter 對象來生成 SvnClientReport 對象。每當 SharpSvn 操作產生一條日志信息時就會調用 MyRealTimeTextWriter 對象的 Write(string) 或 WriteLine(string) 方法,而這兩個方法立即觸發 DataReceived 事件告知外面有日志生成了,于是便達到了實時獲取 SharpSvn 操作日志的目的。

(done)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民县| 竹北市| 泾源县| 普定县| 新巴尔虎右旗| 锡林浩特市| 阿荣旗| 麻城市| 麟游县| 博野县| 上杭县| 天峻县| 利津县| 瑞昌市| 金寨县| 白沙| 赫章县| 章丘市| 托克逊县| 洛隆县| 桃江县| 喀什市| 无棣县| 吴川市| 阿瓦提县| 乌拉特后旗| 开封市| 泗洪县| 榆社县| 多伦县| 赞皇县| 五常市| 丰镇市| 白沙| 阳山县| 军事| 蚌埠市| 云浮市| 陆川县| 彰化市| 德格县|