C# 在c语言中,并非所有代码路径都返回错误#

C# 在c语言中,并非所有代码路径都返回错误#,c#,wrapper,C#,Wrapper,我想将实时信号从情绪传递到八度。 我试着为八度音阶写一个c#包装器。这是代码 namespace LibSharpTave { public class Octave { Process OctaveProcess { get; set; } private string OctaveEchoString { get; set; } public Octave(string PathToOctaveBinaries) {

我想将实时信号从情绪传递到八度。
我试着为八度音阶写一个c#包装器。这是代码

namespace LibSharpTave {
    public class Octave {
        Process OctaveProcess { get; set; }
        private string OctaveEchoString { get; set; }
        public Octave(string PathToOctaveBinaries) {
            StartOctave(PathToOctaveBinaries, false);
        }

        public Octave(string PathToOctaveBinaries, bool CreateWindow) {
            StartOctave(PathToOctaveBinaries, CreateWindow);
        }

        string ptob;
        bool cw;
        private void StartOctave(string PathToOctaveBinaries, bool CreateWindow) {
            ptob = PathToOctaveBinaries;
            cw = CreateWindow;
            this.OctaveEchoString = Guid.NewGuid().ToString();
            OctaveProcess = new Process();
            ProcessStartInfo pi = new ProcessStartInfo();
            if (PathToOctaveBinaries[PathToOctaveBinaries.Length - 1] != '\\')
                PathToOctaveBinaries = PathToOctaveBinaries + "\\";
            pi.FileName = PathToOctaveBinaries + "octave.exe";
            pi.RedirectStandardInput = true;
            pi.RedirectStandardOutput = true;
            pi.RedirectStandardError = true;
            pi.UseShellExecute = false;
            pi.CreateNoWindow = !CreateWindow;
            pi.Verb = "open";
            //
            pi.WorkingDirectory = ".";
            OctaveProcess.StartInfo = pi;
            OctaveProcess.Start();
            OctaveProcess.OutputDataReceived += new DataReceivedEventHandler(OctaveProcess_OutputDataReceived);
            OctaveProcess.BeginOutputReadLine();
            OctaveEntryText = ExecuteCommand(null);

            //OctaveProcess.OutputDataReceived += new DataReceivedEventHandler(Oc


        }





        public double GetScalar(string scalar) {
            string rasp = ExecuteCommand(scalar, 30000);
            string val = rasp.Substring(rasp.LastIndexOf("\\") + 1).Trim();
            return double.Parse(val);
        }

        public double[] GetVector(string vector) {
            string rasp = ExecuteCommand(vector, 30000);
            string[] lines = rasp.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            int i = 0;
            //catam urmatorul entry
            List<double> data = new List<double>();
            while (i != lines.Length) {
                string line = lines[i];
                if (line.Contains("through") || line.Contains("and")) {
                    i++;
                    line = lines[i];
                    string[] dataS = line.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                    for (int k = 0; k < dataS.Length; k++) {
                        data.Add(double.Parse(dataS[k]));
                    }
                }
                i++;
            }
            //caz special in care a pus toate rezultatele pe o singura linie
            if (data.Count == 0) {
                string[] dataS = lines[lines.Length - 1].Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                if (dataS.Length != 0)
                    for (int k = 0; k < dataS.Length; k++) {
                        data.Add(double.Parse(dataS[k]));
                    }
            }
            return data.ToArray();
        }

        public double[][] GetMatrix(string matrix) {
            //string rasp = ExecuteCommand(matrix);
            //aflam numarul de randuri
            string rasp = ExecuteCommand(matrix + "(:,1)", 30000);
            string[] lines = rasp.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            double[][] mat = new double[lines.Length - 1][];
            for (int i = 0; i < mat.Length; i++) {
                mat[i] = GetVector(matrix + "(" + (i + 1) + ",:)");
            }
            return mat;
        }

        StringBuilder SharedBuilder = new StringBuilder();
        ManualResetEvent OctaveDoneEvent = new ManualResetEvent(false);
        public string OctaveEntryText { get; internal set; }

        public void WorkThread(object o) {
            string command = (string)o;
            SharedBuilder.Clear();
            OctaveDoneEvent.Reset();
            if (command != null) {
                OctaveProcess.StandardInput.WriteLine(command);
            }
            //ca sa avem referinta pentru output
            OctaveProcess.StandardInput.WriteLine("\"" + OctaveEchoString + "\"");
            OctaveDoneEvent.WaitOne();
        }
        public string ExecuteCommand(string command, int timeout) {
            if (OctaveProcess.HasExited) {
                StartOctave(ptob, cw);
                if (OctaveRestarted != null) OctaveRestarted(this, EventArgs.Empty);
            }
            exitError = false;

            Thread tmp = new Thread(new ParameterizedThreadStart(WorkThread));
            tmp.Start(command);

            if (!tmp.Join(timeout)) {
                tmp.Abort();
                throw new Exception("Octave timeout");
            }
            if (exitError) {
                throw new Exception(errorMessage);
            }
            return SharedBuilder.ToString();
        }
        public string ExecuteCommand(string command) {
         //   Thread tmp = new Thread(new ParameterizedThreadStart(WorkThread));
         //   tmp.Start(command);

        //    tmp.Join();

          //  return SharedBuilder.ToString();

            if (OctaveProcess.HasExited)
            {
                OctaveProcess.Start();
            }
            SharedBuilder.Clear();
            if (command != null)
            {
                OctaveProcess.StandardInput.WriteLine(command);
                OctaveDoneEvent.Reset();
                OctaveDoneEvent.WaitOne();
                return SharedBuilder.ToString();
            }

            Octave octave = new Octave(@"c:\software\Octave-3.6.4",false);
            octave.ExecuteCommand("a=[1,2;3,4];");
            octave.ExecuteCommand("result=a;");
            double[][] m = octave.GetMatrix("result");


        }
        bool exitError = false;
        string errorMessage = null;
        void OctaveProcess_OutputDataReceived(object sender, DataReceivedEventArgs e) {
            if (e.Data == null) {
                SharedBuilder.Clear();
                //errorMessage = OctaveProcess.StandardError.ReadToEnd();
                SharedBuilder.Append("Octave has exited with the following error message: \r\n" + errorMessage);
                //exitError = true;
                OctaveDoneEvent.Set();
                return;
            }
            if (e.Data.Trim() == "ans = " + OctaveEchoString)
                OctaveDoneEvent.Set();
            else
                SharedBuilder.Append(e.Data + "\r\n");
        }
        public event OctaveRestartedEventHandler OctaveRestarted;
        public delegate void OctaveRestartedEventHandler(object sender, EventArgs e);
    }

    //custom class
   // void OctaveProcess_OutputDataReceived (object sender, DataReceivedeEventArgs e)
    /*{
        if (e.data == null)
        {
            SharedBuilder.Clear();
            SharedBuilder.Append("Octave has exited with the following error message: \r\n" + OctaveProcess.StandardError.ReadToEnd());
            OctaveDoneEvent.Set();
            return;
        }
        if (e.data.Trim == "ans =" + OctaveEchoString())
            OctaveDoneEvent.set();
        else
            SharedBuilder.Append(e.Data + "\r\n");

    }*/




}
namespace LibSharpTave{
公共级倍频程{
进程八维进程{get;set;}
私有字符串OctaveEchoString{get;set;}
公共八度(字符串路径ToOctaveBaries){
StartOctave(路径tooctavebinaries,false);
}
公共八度(字符串路径ToOctaveBaries,bool CreateWindow){
StartOctave(路径tooctavebinaries,CreateWindow);
}
字符串ptob;
布尔cw;
私有void StartOctave(字符串路径tooctavebinaries,bool CreateWindow){
ptob=pathtooctavebaries;
cw=创建窗口;
this.OctaveEchoString=Guid.NewGuid().ToString();
OctaveProcess=新流程();
ProcessStartInfo pi=新的ProcessStartInfo();
if(pathtooctavebaries[pathtooctavebaries.Length-1]!=“\\”)
PathToOctaveBaries=PathToOctaveBaries+“\\”;
pi.FileName=pathtooctavebaries+“octave.exe”;
pi.RedirectStandardInput=true;
pi.RedirectStandardOutput=true;
pi.RedirectStandardError=true;
pi.UseShellExecute=false;
pi.CreateNoWindow=!CreateWindow;
动词“open”;
//
pi.WorkingDirectory=“.”;
OctaveProcess.StartInfo=pi;
OctaveProcess.Start();
OctaveProcess.OutputDataReceived+=新的DataReceivedEventHandler(OctaveProcess\u OutputDataReceived);
OctaveProcess.BeginOutputReadLine();
OctaventryText=ExecuteCommand(null);
//OctaveProcess.OutputDataReceived+=新的DataReceiveDevenHandler(Oc
}
公共双GetScalar(字符串标量){
string rasp=ExecuteCommand(标量,30000);
string val=rasp.Substring(rasp.LastIndexOf(“\\”)+1.Trim();
返回double.Parse(val);
}
public double[]GetVector(字符串向量){
string rasp=ExecuteCommand(向量,30000);
string[]line=rasp.Split(新字符[]{'\r','\n'},StringSplitOptions.RemoveEmptyEntries);
int i=0;
//卡塔姆-乌尔马托入口
列表数据=新列表();
while(i!=行.长度){
字符串行=行[i];
if(第行包含(“至”)| |第行包含(“和”)){
i++;
直线=直线[i];
string[]dataS=line.Split(新字符[]{'','\t'},StringSplitOptions.RemoveEmptyEntries);
for(int k=0;k     public string ExecuteCommand(string command) {
     //   Thread tmp = new Thread(new ParameterizedThreadStart(WorkThread));
     //   tmp.Start(command);

    //    tmp.Join();

      //  return SharedBuilder.ToString();

        if (OctaveProcess.HasExited)
        {
            OctaveProcess.Start();
        }
        SharedBuilder.Clear();
        if (command != null)
        {
            OctaveProcess.StandardInput.WriteLine(command);
            OctaveDoneEvent.Reset();
            OctaveDoneEvent.WaitOne();
            return SharedBuilder.ToString();
        }

        Octave octave = new Octave(@"c:\software\Octave-3.6.4",false);
        octave.ExecuteCommand("a=[1,2;3,4];");
        octave.ExecuteCommand("result=a;");
        double[][] m = octave.GetMatrix("result");

        //**** The Error is here *****
        //return a string here 
    }
public string ExecuteCommand(string command) {
public void ExecuteCommand(string command) {