我正在编写自己的调试器可视化器。所有这些都非常适合向可视化器展示数据。
现在我添加代码以更清晰:
public class MyVisualiserObjectSource : VisualizerObjectSource
{
public override void GetData(object target, Stream outgoingData)
{
string data= target as string;
var writer = new StreamWriter(outgoingData);
writer.Write(data);
writer.Flush();
}
}
public class MyVirtualizer : DialogDebuggerVisualizer
{
protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
{
var streamReader = new StreamReader(objectProvider.GetData());
string data = streamReader.ReadToEnd();
using (var form = new MyVirtualizerForm(data))
{
windowService.ShowDialog(form);
}
}
}
这里的字符串被传递给可视化器并显示我自己的表单。有用。但现在我想将修改后的数据从表单传回给变量。
我怎么做?
编辑:
我发现我需要重写TransferData
. VisualizerObjectSource
但是在MSDN中没有关于我如何正确实现这一点的详细信息。
有人能帮助我吗?
编辑2:
我用 IL-Spy 看了什么TransferData
方法。它抛出一个异常。所以我重写了这个方法。但它仍然无法正常工作。在 中incomingData
是修改后的字符串Form
。但我没有把这个值取回变量:(
public class StringVisualiserObjectSource : VisualizerObjectSource
{
public override void GetData(object target, Stream outgoingData)
{
var data = target as string;
var writer = new StreamWriter(outgoingData);
writer.Write(data);
writer.Flush();
}
public override void TransferData(object target, Stream incomingData, Stream outgoingData)
{
incomingData.CopyTo(outgoingData);
}
}