public string Execute(string cmd, DebugOutputCallback callback = null) { HResult hr; IDebugOutputCallbacks origCallback; var sb = new StringBuilder(); lock (executeLock) { hr = client.GetOutputCallbacks(out origCallback); if (!hr.IsOK) { origCallback = null; } if (null == callback) { callback = (m, t) => { sb.Append(t); return(0); } } ; hr = client.SetOutputCallbacks(new DebugOutputCallbacks(callback)); if (!hr.IsOK) { sb.AppendLine(string.Format("SetOutputCallbacks failed. HRESULT={0:x}.", hr)); } else { hr = control.Execute(DEBUG_OUTCTL.THIS_CLIENT, cmd, DEBUG_EXECUTE.DEFAULT); if (!hr.IsOK) { sb.AppendLine(string.Format("Command encountered an error. HRESULT={0:x}.", hr)); } } if (origCallback != null) { client.SetOutputCallbacks(origCallback); } } return(sb.ToString()); } }
public DebugOutputCallbacks(DebugOutputCallback callback) { this.callback = callback; }