2017-06-23 83 views

回答

2

爲了捕獲輸出,你需要實現自己的ICharacterDevice。好消息是你只需要實現WriteConsole方法。您可以從默認的ConsoleDevice開始或從頭開始自己的。

public class MyCharacterDevice : RDotNet.Devices.ICharacterDevice 
{ 
    public StringBuilder sb = new StringBuilder(); 

    public void WriteConsole(string output, int length, RDotNet.Internals.ConsoleOutputType outputType) 
    { 
     sb.Append(output); 
    } 

    //rest of the implementation here 
} 

我添加了一個StringBuilder來挖掘並附加每個輸出消息。

最後,你需要這個ICharacterDevice傳遞給雙方的GetInstance和初始化方法:

RDotNet.StartupParameter sp = new StartupParameter(); 
sp.Interactive = false; 
sp.Quiet = false; 

MyCharacterDevice ic = new MyCharacterDevice(); 
REngine.SetEnvironmentVariables(Rpath); 
REngine engine = REngine.GetInstance("", true, sp, ic); 

if (engine.IsRunning == false) 
{ 
    engine.Initialize(sp, ic, true); 
} 

//engine.Evaluate code... 

string rConsoleMessages = ic.sb.ToString(); 
+0

很不錯的解決方案大衛。我在WriteConsole()方法中調用了簡單的記錄器,這樣我的活動輸出顯示在我的WPF應用程序中。 – JavaJedi