Нужна помощь с InvokeRequired для Web.UI - PullRequest
3 голосов
/ 11 апреля 2010

У меня есть многопоточное приложение на C #, которое пытается записать в TextBox в Windows. Forms, созданный другим потоком.

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

public delegate void MessageDelegate(Communication message);
void agent_MessageReceived(Communication message)
{
   if (InvokeRequired)
   {
       BeginInvoke(new MessageDelegate(agent_MessageReceived), new object[] { message });
   }
   else
   {
      TextBox1.Text += message.Body;
   }
}

Теперь мне нужно сделать то же самое для TextBox в приложении ASP.NET, но, очевидно, ни InvokeRequired, ни BeginInvoke не существует для TextBox в Web.UI. Что я могу сделать?

Ответы [ 2 ]

2 голосов
/ 11 апреля 2010

Я думаю, что вам не нужно это в веб-интерфейсе. Каждый клиент получает свой собственный TextBox, и WebServer не использует TextBox более чем для одного запроса. Я что-то здесь скучаю?

0 голосов
/ 11 апреля 2010

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

Во всяком случае, ответ на ваш вопрос заключается в том, что не существует метода InvokeRequired или Invoke, поскольку в элементах управления ASP.NET нельзя получить доступ через потоки. Только поток, обрабатывающий в настоящее время веб-запрос, может получить доступ к элементам обслуживаемой страницы.

Вам нужно переосмыслить свой подход. Вы не можете делать вещи в веб-приложении так же, как в настольном приложении.

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