Как зацыклить ReadFile?

Тема в разделе "WASM.NETWORKS", создана пользователем Fantasista, 15 мар 2011.

  1. Fantasista

    Fantasista New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2011
    Сообщения:
    8
    Здравствуйте, подскажите, пожалуйста, в чем дело. Если считывать принятые пакеты функией ReadFile единоразово, то все работает нормально, но если ее зацыклить, то приложение подвисает. Вот код:
    Код (Text):
    1. static public int Recive(out byte[] outBuffer)
    2.         {
    3.             byte[] buffer = new byte[1512];
    4.             uint Recived = 0;
    5.             unsafe
    6.             {
    7.                 fixed (void* lpoutbuffer = buffer)
    8.                 {
    9.                     ReadFile(hDriver, lpoutbuffer, (uint)buffer.Length, &Recived, 0);
    10.  
    11.                 }
    12.             }
    13.             outBuffer = buffer;
    14.             return (int)Recived;
    15.         }
    Помогите разобраться, спасибо.
     
  2. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    В каком смысле "подвисает"? Напишите подробнее.
     
  3. Fantasista

    Fantasista New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2011
    Сообщения:
    8
    Прошу прощения за не точную формулировку, не совсем подвисает.
    Вот:
    Код (Text):
    1. private void Button1_Click(object sender, RoutedEventArgs e)
    2.         {
    3.             byte[] BytesRecieved;
    4.             int recived = 0, i=0;
    5.             statusBar1.Items.Add(DriverControl.MessageTextBlock);
    6.             DriverControl.OpenAdapter(AdaptInfo, SelectedIndex);
    7.             do
    8.             {
    9.                 DriverControl.Recive(out BytesRecieved);
    10.                 textBox1.Text = BitConverter.ToString(BytesRecieved);
    11.                 i++;
    12.             } while (i==10);
    13.            
    14.         }
    Как видно из кода вывод в текстбокс должен происходить после каждого получения пакета, а он происходит только один, последний раз
     
  4. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    Fantasista
    Случайно не поэтому:
    Код (Text):
    1. int recived = 0, i=0;
    2. do
    3.             {
    4.                 DriverControl.Recive(out BytesRecieved);
    5.                 textBox1.Text = BitConverter.ToString(BytesRecieved);
    6.                 i++;
    7.             } while (i==10);///!!!!
    Цикл осуществляется пока i равен 10. У вас с самого начала он равен 0.Вот поэтому всего
    один раз и крутиться. )))
     
  5. redcat

    redcat New Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    62
    Об этом что ли речь?
    Код (Text):
    1. do
    2. {
    3.     result = ReadFile(hDevice, buffer, bufferSize, &bytesReturned, NULL);
    4. }
    5. while (result && bytesReturned);
     
  6. Fantasista

    Fantasista New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2011
    Сообщения:
    8
    Да, прошу прощения, не уследил )), но в таком
    Код (Text):
    1. do
    2.             {
    3.                 DriverControl.Recive(out BytesRecieved);
    4.                 textBox1.Text = BitConverter.ToString(BytesRecieved);
    5.                 i++;
    6.             } while (i<10);
    виде вывод тоже происходит 1 раз
     
  7. AndjellaArtavazdovna

    AndjellaArtavazdovna New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2010
    Сообщения:
    615
    В общем насколько я понял это C#? Тогда посмотрите что возвращает ReadFile. Да,кстати,
    какие данные вы принимаете?
    Код (Text):
    1. textBox1.Text = BitConverter.ToString(BytesRecieved)
    На сколько я понимаю это вывод содержимого буфера. Может просто все данные одинаковые
    и вы не видите разницы между выведенным содержимым?
     
  8. Fantasista

    Fantasista New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2011
    Сообщения:
    8
    принимаю я пакеты из сети, но дело в другом, если запустить отлакду и проследить ха значением свойства "Text", то оно меняеться, но в самом тектбоксе этого почему-то не видно, а вот если заменить строчку textBox1.Text = BitConverter.ToString(BytesRecieved); на вывод месседжбокса, то он выводиться 10 раз как положено, выходит дело не в ReadFile