Используя C #, как я могу обновить элементы списка из другого класса? - PullRequest
0 голосов
/ 02 декабря 2010

Hy,

В моем проекте asp.net (c #) я использую многопоточность для обработки некоторых сообщений. У меня есть страница отображения, которая содержит список со всеми действиями, которые предпринимаются при обработке сообщения. И класс, где я обрабатываю сообщение.

Default.aspx:

        protected void Page_Load(object sender, EventArgs e)
        {
            //starts the thread and call the method from Process.cs
        }

        public void SetListItem(string text)
        {
            myListBox.Items.Add(text);
            myListBox.DataBind();
        }

Process.cs

public class Process
{
  public Process()
  {
    Default defaultPage;
    defaultPage.SetListItem("==> Received message!");
  }
}

Но в списке ничего не отображается. У кого-нибудь есть идеи, где я не прав? Спасибо.

Джеф

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

Удалить привязку данных

 myListBox.DataBind();

Вам это не нужно, так как вы добавляете элемент в коллекцию списка.Если вы устанавливаете свойство DataSource, вам придется использовать его.Это все зависит от того, где в жизненном цикле запускается ваше обновление.Возможно, ваше обновление заменяется кодом в другом месте процесса.

По правде говоря, я бы выбрал это из отдельного потока.Поскольку вам нужно обновить его до того, как страница отправит информацию в браузер, вам нужно либо сохранить ее в том же потоке, чтобы убедиться, что она завершена, либо вам потребуется какая-то проверка в концеВаша страница выполняет процесс, чтобы убедиться, что он завершен.Возможно, ваша тема завершает работу после того, как страница завершила обработку.

0 голосов
/ 02 декабря 2010

Клаус прав.Когда страница нарисована, она просто сидит там.

Итак, чтобы сделать то, что вы хотите, запустив Process в отдельном потоке: запишите ваше выходное сообщение в Process в хранилище данных, даже если это просто добавление в текстовый файл.Затем настройте страницу на автоматическое обновление каждый раз X и пополняйте список при загрузке содержимым этого хранилища данных.

Позже, когда все работает, вы можете использовать Ajax для обновления только списка, вместовсей страницы.

0 голосов
/ 02 декабря 2010

Страница asp.net, такая как Default, генерирует html, который возвращается запрашивающему браузеру. Когда этот html был создан и отправлен в браузер, вы не сможете добавлять элементы на стороне сервера к тому, что отображается в браузере.

То есть порождение потоков, выполняющих некоторую работу, не является хорошей идеей для вашего текущего сценария.

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