国产探花免费观看_亚洲丰满少妇自慰呻吟_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)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泾源县| 平南县| 新河县| 卓资县| 石阡县| 赤城县| 阿拉善盟| 淮北市| 高淳县| 英山县| 峨山| 特克斯县| 桦甸市| 金塔县| 甘孜| 凉城县| 和平区| 高阳县| 尼木县| 壶关县| 沙雅县| 登封市| 古交市| 罗田县| 石景山区| 林甸县| 崇仁县| 平南县| 五华县| 久治县| 大宁县| 略阳县| 哈密市| 礼泉县| 洞口县| 富阳市| 赤壁市| 涟源市| 涿州市| 沭阳县| 镇坪县|