Обновление строки datagridview из потока в c # - PullRequest
1 голос
/ 10 августа 2010

У меня есть представление данных в приложении формы Windows.

Приложение публикует все отображаемые данные на внешнем веб-сайте.коды возврата на веб-сайте, поэтому приложение определяет статус публикуемых данных.

Мне нужно создать параметризованный поток, который принимает индекс строки в качестве параметра, публикует данные строки и обновляет их, возвращая значение.(Это может включать изменение цвета фона строки и изменение значения столбца)

Возможно ли так, как я думаю?или есть лучший способ?

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Что ж, поскольку DataGridView - это элемент управления с графическим интерфейсом, вы не сможете вносить в него изменения из другого потока.Вам нужно будет отправить сообщение в основной поток GUI.К счастью, C # имеет хорошую поддержку для этого.Напишите метод (предположительно в вашем основном классе формы), который выполняет фактическую работу:

public void SetRowFromWebResult(int row, Color background, ...)
{
    // ...
}

Затем в вашем потоке используйте Invoke метод для объекта формы (неделегат):

myForm.Invoke(() => myForm.SetRowFromWebResult(row, background, ...));

Предположительно, вы бы запустили ваш HTTP-запрос в такой цепочке:

int row = ...;
var myThread = new Thread(() =>
{
    // Fire off the request
    var request = WebRequest.Create(...);
    var response = ...;

    // Calculate the parameters (e.g. row background color)
    Color background = (response.Code == ...) ? ... : ...;

    // Tell the GUI to update the DataGridView
    myForm.Invoke(() => myForm.SetRowFromWebResult(row, background, ...));
});
myThread.Start();
0 голосов
/ 10 августа 2010

Дополнительно вы можете использовать фоновый рабочий поток, чтобы предотвратить исключение кросс-потока.

Привет

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