C# LINQPad转储(toDataGrid)不';直到执行结束才显示

C# LINQPad转储(toDataGrid)不';直到执行结束才显示,c#,linqpad,C#,Linqpad,我正在LINQPad中编写一个用于自动批量邮寄的小脚本。尽管脚本验证了数据,我还是希望有人检查并确认。下面是我在进行理智检查时的尝试: var datasource = Enumerable.Range(0, 10) //not actual data .Dump("Data", true); var message = string.Format("Please enter {0} to confirm or -1 to cancel : ", datasource.Count())

我正在LINQPad中编写一个用于自动批量邮寄的小脚本。尽管脚本验证了数据,我还是希望有人检查并确认。下面是我在进行理智检查时的尝试:

var datasource = Enumerable.Range(0, 10) //not actual data
    .Dump("Data", true);

var message = string.Format("Please enter {0} to confirm or -1 to cancel : ", datasource.Count());
var container = new DumpContainer(message).Dump("Last Confirmation");
do
{
    var result = Console.ReadLine();
    container.Content = (container.Content as string) + result;

    if (result == "-1") return;
    if (result == datasource.Count().ToString()) break;

    container.Content = (container.Content as string) + "\n" + message;
} while (true);

//do stuffs...
它的大部分工作都很好,除了
数据源
在执行结束之前不会被转储,这破坏了这段代码的全部用途。如何立即显示“数据”选项卡


请注意,我打算将
数据源
转储到一个新的
DataGrid
选项卡中,因为它无法轻松扫描或导出到excel。

我发现了一个可以绕过此问题的欺骗:
Hyperlinq

void Main()
{
    var datasource = Enumerable.Range(0, 10) //not actual data
        .Dump("Data", true);

    Console.Write("Please confirm everything is correct : "); //couldnt manage to get them to dump on same line
    new Hyperlinq(() => DoStuffs(datasource), "Do Stuffs").Dump();
}

// Define other methods and classes here
public void DoStuffs(IEnumerable<int> datasource)
{
    datasource.Select(x => 2 * x).Dump("Altered Data", true);


    new Hyperlinq(() => DoStuffs(datasource), "Do More Stuffs").Dump();
}
void Main()
{
var datasource=Enumerable.Range(0,10)//不是实际数据
.Dump(“数据”,真);
Console.Write(“请确认一切正确:”;//无法将它们转储到同一行
新的Hyperlinq(()=>DoStuffs(数据源),“DoStuff”).Dump();
}
//在此处定义其他方法和类
公共void dostuff(IEnumerable数据源)
{
选择(x=>2*x).Dump(“更改的数据”,true);
新的Hyperlinq(()=>dostufs(数据源),“做更多的事情”).Dump();
}

还有一个小麻烦/错误是由这个欺骗引入的。当数据网格中没有足够的行来占据整个区域时,会抛出一个
ArgumentOutOfRangeException
,并转储到结果面板,但不会中断执行流程。

这在v4.51.03中得到了修复(在编写时为beta版)

使用新的Util.ReadLineAsync方法:

for (int i = 0; i < 10; i++)
{
    int x = await Util.ReadLineAsync<int> ("Enter a number");
    Enumerable.Range (0, x).Dump (x + " integers", true);
}
for(int i=0;i<10;i++)
{
int x=await Util.ReadLineAsync(“输入一个数字”);
可枚举范围(0,x).Dump(x+“整数”,真);
}

转储到网格需要一个消息循环,该循环要求取消阻止主线程。我们还需要进一步考虑。@JoeAlbahari将.Dump转换为网格使用DoEvents或类似的版本如何?当然,这有点骇人,但可能是唯一的办法。