2017-01-25 11 views
-1

Я отрываю свои волосы этим, и я уже потратил больше времени на это. Я уверен, что это что-то глупое, и у меня просто недостаточно опыта, поэтому любая помощь очень ценится!C# Список делегатов для BeginInvoke

Вот сделка ... У меня есть список объектов National Instruments Graph, которые я должен обновить новыми данными. Имеет ли это смысл? Он работает с кодом ниже, но, очевидно, только для одного графика. Вопрос заключается в том, как передать список графиков вместо одного, а затем пропустить их для назначения данных. Спасибо заранее!

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)); 
    } 
+1

И ваш вопрос ...? – Gusman

+0

Нет, на данный момент вопрос не имеет смысла. Нет «списка переходов графов» - и использование объекта менее полезно, чем минимальный, но ясный пример ... –

+0

Хорошо, я обновлю код с тем, что у меня есть вместо «объектов». Я просто использовал объекты, если кто-то собирался его скомпилировать. Я добавил вопросы в код, а также обновил свое описание. Спасибо – SYB

ответ

0

Я не уверен, я понимаю, укомплектовать вопрос так вот это первое предложение, так что вы можете объяснить, как это не то, что вы ищете :)

private void GetAndPlotData(List<Action<object>> actionPlotData) 
{ 
    for (int ok = 0; ok < 10000000; ok++) 
    { 
     // Get some data 
     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? 
     for (int i = 0; i < actionPlotData.Count; i++) 
     { 
      Dispatcher.BeginInvoke(actionPlotData[i], new object[] { testData[i] }); 
     } 

     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(new List<Action<object>> { 
     data => Graphs[0].DataSource = data, 
     data2 => Graphs[1].DataSource = 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)); 
+0

Да, это делает график в обоих графиках, так что это начало! Вы понимаете это правильно. Но предположим, что у меня 8 или даже больше графиков. Должен ли я буквально вручную выписывать каждую строку за раз (при прохождении)? Или есть какой-то способ сделать как один параметр? – SYB

+0

Вы хотите, чтобы коллекция в начале теста была динамичной, а не жестко закодированной? –

+0

Да. Я хотел бы знать, как это сделать, потому что это применимо ко многим местам моего проекта. Благодаря! – SYB