私は自分のデバッガービジュアライザーを書いています。すべてがうまく機能し、データとともにビジュアライザーに表示されます。
ここで、より明確にするためにコードを追加します。
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);
}
}