#c# #asp.net #raspberry-pi
#c# #asp.net #raspberry-pi
Вопрос:
Привет, я пытаюсь создать единую HTML-страницу, которая отображает показания моего Raspberry Pi в режиме реального времени.
Отправляются данные, по которым запускается делегат.
Однако функция, которую запускает делегат, не может взаимодействовать с каким-либо элементом управления в моем ASP.Net Страница.
Вот как выглядит мой код:
public partial class newIndex : System.Web.UI.Page
{
DataComms dataComms;
public void commsDataReceive(string strData)
{
// This line is able to successfully print out the strData
System.Diagnostics.Debug.WriteLine(strData);
// This line doesn't throw an error but doesn't work
Label1.Text = strData;
}
private void InitComms()
{
dataComms = new DataComms();
dataComms.dataReceiveEvent = new DataComms.DataReceivedDelegate(commsDataReceive);
}
protected void Page_Load(object sender, EventArgs e)
{
InitComms();
}
}
Моя теория заключается в том, что после загрузки страницы я не могу вносить в нее какие-либо изменения динамически?? Итак, я могу решить это с помощью панели обновления, верно?
Ну, я тоже попробовал это, и это также не сработало, так как мне пришлось вызывать UpdatePanel1.Update()
, который обращается к панели управления UpdatePanel.
Если кто-нибудь может помочь, я буду очень благодарен!
Ответ №1:
Страницы сервера не работают таким образом. Скорее всего, страница уже отправлена в браузер к моменту запуска commsDataReceive. Я думаю, у вас есть только один «клиент» для отображения этой информации, чтобы вы могли создавать dataComms как статические и обновлять код для последующего использования. Это, конечно, не лучшее решение, но оно должно соответствовать вашим требованиям
public partial class newIndex : System.Web.UI.Page
{
static DataComms dataComms;
static string lastData="";
public void commsDataReceive(string strData)
{
// This line is able to successfully print out the strData
System.Diagnostics.Debug.WriteLine(strData);
// This line doesn't throw an error but doesn't work
lastData = strData;
}
protected void Page_Load(object sender, EventArgs e)
{
if (dataComms != null)
{
dataComms = new DataComms();
dataComms.dataReceiveEvent = new DataComms.DataReceivedDelegate(commsDataReceive);
}
Label1.Text = lastData;
}
}
Комментарии:
1. Привет, спасибо за ваш ответ! но разве это не означает, что мне придется обновить страницу, чтобы получить последние сохраненные данные? Я не хочу, чтобы метка обновлялась автоматически без обратной передачи, вот что я имел в виду
real-time
2. в этом случае веб-сокеты — это то, что вы ищете. Если вы используете asp.net ядро, тогда это может помочь docs.microsoft.com/en-us/aspnet/core/fundamentals /…