C#列为BeginInvoke的代表

C#列为BeginInvoke的代表,c#,list,delegates,begininvoke,C#,List,Delegates,Begininvoke,我已经为此浪费了一天多的时间。我确信这是件愚蠢的事情,我只是没有足够的经验,所以非常感谢任何帮助 事情是这样的。。。我有一个国家仪器图形对象的列表,我必须用新数据刷新这些对象。 这有意义吗?它适用于下面的代码,但显然只适用于一个图形。 问题是,如何传递图形列表,而不是仅仅传递一个,然后循环通过它们来分配数据。 提前谢谢你 private void GetAndPlotData(Action<object> actionPlotData) { for (

我已经为此浪费了一天多的时间。我确信这是件愚蠢的事情,我只是没有足够的经验,所以非常感谢任何帮助

事情是这样的。。。我有一个国家仪器图形对象的列表,我必须用新数据刷新这些对象。 这有意义吗?它适用于下面的代码,但显然只适用于一个图形。 问题是,如何传递图形列表,而不是仅仅传递一个,然后循环通过它们来分配数据。 提前谢谢你

    private void GetAndPlotData(Action<object> actionPlotData)
    {
        for (int ok = 0; ok < 10000000; ok++)
        {
            // Get some data here for every graph
            double[][] testData = new double[2][];
            testData[0] = new double[] { 1, 2, 3, 4 };
            testData[1] = new double[] { 2, 4, 6, 8 };

            // Plot it
            // QUESTION - how to reference passed List of Graphs in the loop to assign data?
            Dispatcher.BeginInvoke(actionPlotData, new object[] { testData });

            Thread.Sleep(10);
        }
    }

    private async void StartTest()
    {
        // QUESTION -  how to pass List Of Graphs as an Action to loop through them later on?
        await Task.Run(() => GetAndPlotData(data => Graphs[0].DataSource = data));
    }
private void GetAndPlotData(Action actionPlotData)
{
对于(int ok=0;ok<10000000;ok++)
{
//在这里获取每个图表的一些数据
双精度[]测试数据=新双精度[2][];
testData[0]=新的双[]{1,2,3,4};
testData[1]=新的双[]{2,4,6,8};
//策划它
//问题-如何引用循环中已传递的图表列表来分配数据?
Dispatcher.BeginInvoke(actionPlotData,新对象[]{testData});
睡眠(10);
}
}
专用异步void StartTest()
{
//问题-如何将图表列表作为一个动作传递给后面的循环?
等待任务。运行(()=>GetAndPlotData(数据=>Graphs[0]。数据源=data));
}

我不确定我是否完全理解了这个问题,因此这里是第一个建议,以便您可以解释为什么这不是您想要的:)

private void GetAndPlotData(列出actionPlotData)
{
对于(int ok=0;ok<10000000;ok++)
{
//获取一些数据
双精度[]测试数据=新双精度[2][];
testData[0]=新的双[]{1,2,3,4};
testData[1]=新的双[]{2,4,6,8};
//策划它
//问题-如何引用循环中已传递的图列表?
对于(int i=0;iGetAndPlotData(新列表{
数据=>图形[0]。数据源=数据,
data2=>Graphs[1]。数据源=data2
});
}
动态列表的更新版本

    var actions = Graphs.Select(g => (Action<object>)(data => g.DataSource = data)).ToList();

    // QUESTION -  how to pass List Of Graphs as an Action to loop through them later on?
    await Task.Run(() => GetAndPlotData(actions));
var actions=Graphs.Select(g=>(Action)(data=>g.DataSource=data)).ToList();
//问题-如何将图表列表作为一个动作传递给后面的循环?
等待任务。运行(()=>GetAndPlotData(操作));

你的问题是…?不,这个问题目前没有真正的意义。没有“图表传递列表”-使用object比一个最小但清晰的示例更没有帮助…好的,我将用我拥有的更新代码,而不是“objects”。我只是使用了对象,以防有人要编译它。我在代码中添加了问题,还更新了我的描述。谢谢,是的,这两个图都有绘制,所以这是一个开始!您基本上理解正确。但假设我有8个或更多的图。我真的需要一次手动写出每一行吗(路过时)?或者是否有一些方法可以作为一个参数?您希望开始测试中的集合是动态的,而不是硬编码的,对吗?是的。我很想知道如何做到这一点,因为它适用于我项目中的许多地方。谢谢!好的,我用另一个版本的开始测试内容编辑了我的答案。想法是使用lin从每个图形构建一个操作q、 很好!非常优雅,现在我看到它了。非常感谢!我会继续将这个解决方案集成到我的代码中。非常确定它会工作。
    var actions = Graphs.Select(g => (Action<object>)(data => g.DataSource = data)).ToList();

    // QUESTION -  how to pass List Of Graphs as an Action to loop through them later on?
    await Task.Run(() => GetAndPlotData(actions));