Вопрос делегата темы C # - PullRequest
1 голос
/ 28 июля 2011

Я нахожусь в положении, когда я наконец вынужден разбить свою программу на потоки, так как она мучительно медленная.Моя ситуация такова, что у меня есть два компонента ComponentOne Flexgrid DataGridView ... Один позволяет прямое редактирование.И мне нужна вторая сетка, чтобы обновить ее содержимое на основе первой сетки.В настоящее время у меня есть то, что я имею в виду:

class MyApp
{
    void GridOne_AfterEdit(object sender, RowColEventArgs e)
    {
        UpdateList();
    }

    void UpdateList()
    {
        foreach (Row r in GridOne.Rows)
        {
            //calculate information per row and add to GridTwo
        }
    }
}

И это невыносимо медленно ... Исходя из того, что я понимаю с делегатами, мне нужен делегат для каждого компонента, к которому мне нужен доступ / ссылка?Я пробовал такие вещи, как назначение GridTwo для DataTable и изменение DataTable из потока, но в итоге только пустые записи.Кроме того, я заметил, что у меня есть проблемы с его перезапуском, я полагаю, что поток мог всегда слушать или отвечать на логическое значение.Не просить, чтобы кто-то закончил мой код.Просто спрашиваю, какой эффективный выбор будет для этого.Спасибо за любые советы!

Ответы [ 2 ]

1 голос
/ 28 июля 2011
foreach (Row r in GridOne.Rows)

Не будет никакого веселья или успеха.

0 голосов
/ 28 июля 2011

Самое простое, что вы можете сделать, чтобы получить параллелизм, это сегментировать ваш набор строк, что-то вроде (здесь нет intellisense, поэтому, пожалуйста, простите за незначительные злоупотребления):

var gridOneFirstHalf = new Row[][] { GridOne.Rows.Take(GridOne.Rows.Count / 2), new Row[GridOne.Rows.Count / 2] };
var gridOneSecondHalf = new Row[][] { GridOne.Rows.Skip(GridOne.Rows.Count / 2).ToArray(), new Row[GridOne.Rows.Count / 2] };

ParameterizedThreadStart halfThreadStarter = new ParameterizedThreadState((state) => ProcessIntoResultsMember(state));

Thread processFirstHalf = new Thread(halfThreadStarter, gridOneFirstHalf);
Thread processSecondHalf = new Thread(halfThreadStarter, gridOneSecondHalf);

processFirstHalf.Start();
processSecondHalf.Start();

processFirstHalf.Join();
processSecondHalf.Join();

GridTwo.Rows = gridOneFirstHalf[1].Concat(gridOneSecondHalf[1]);

Я не знаком с этим элементом управления GridOneрасширения linq, о которых я говорил, доступны ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...