Как обрабатывать непрерывные запросы GET? - PullRequest
0 голосов
/ 14 июня 2019

Я работаю над небольшим приложением Windows Form, которое показывает мне потоки нескольких IP-камер (из разных компаний) в моей сети, а также позволяет мне перемещать камеры (влево, вправо, вверх, вниз, масштабирование). Это реализуется с помощью AFORGE.net MJPEG Streams и движений камеры через запросы на запуск. Проблема: у меня есть одна камера, которая не двигается пошагово (например, после каждого нажатия на кнопку «вверх»), но движется непрерывно. Останавливается только когда я отправляю другой запрос с параметром «стоп».

GET Запрос на движение вправо:

http://192.XXX.XX.XXX:XXXX/web/cgi-bin/hi3510/ptzctrl.cgi?-step=0&-act=right&-speed=63

GET Запрос на остановку движения:

http://192.XXX.XX.XXX:XXXX/web/cgi-bin/hi3510/ptzctrl.cgi?-step=0&-                                                               act=stop&-speed=63

Функция, которую я использую для других камер:

private void move_right()
    {
    string url = 'someURL';
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    request.GetResponse();
    request.Abort(); 
    }

Я бы хотел, чтобы камера двигалась вправо после нажатия кнопки, но при выполнении запроса на перемещение вправо моя программа просто зависает.

1 Ответ

1 голос
/ 14 июня 2019

Используйте объект HttpClient и создайте асинхронный запрос, попробуйте что-то вроде (не проверено):

private async Task move_right()
{
    var url = 'someURL';
    var client = new HttpClient();
    var request = new HttpRequestMessage() 
    {
        RequestUri = new Uri(url),
        Method = HttpMethod.Get,
    };

    var response = await client.SendAsync(request);

    //Do something with your response
}

private async Task executeWebRequests() 
{
    //Usage - Await for result
    await move_right();

    //Execute asynchronously
    move_right(); //Will create a new task and run asynchronously in the BG
    move_right(); //Will create a new task and run asynchronously in the BG
    move_right(); //Will create a new task and run asynchronously in the BG
    move_right(); //Will create a new task and run asynchronously in the BG
}
...