2015-01-08 34 views
2

我正在LINQPad上的一个小脚本中进行自动批量发送。尽管有脚本验证了数据,但我希望通过某人的确认和确认。并且,以下是我尝试在健全性检查:LINQPad Dump(toDataGrid)直到执行结束时才显示

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... 

它的大部分工作的伟大,除了datasource没有被抛弃,直到执行其全败的代码块的目的而结束。我怎样才能让数据标签立即显示?

请注意,我打算将datasource转储到新的DataGrid选项卡中,因为它无法轻松扫描,也无法导出为ex​​cel。

+0

转储到电网需要一个消息循环需要主线程畅通。将不得不进一步思考。 –

+0

@JoeAlbahari如何使.Dump到一个网格使用DoEvents或类似的?当然,黑客可能是唯一的方法。 –

回答

2

现已修复于v4.51.03(在撰写本文时为测试版)。

使用新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); 
} 
0

这里是个骗子,我发现来解决这个问题: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(); 
} 

也有与此作弊推出了小麻烦/错误。当数据网格中没有足够的行占据整个区域时,将抛出ArgumentOutOfRangeException并将其转储到结果面板,但不会中断执行流。

相关问题