2014-09-16 3 views
-1

Привет, я хотел бы спросить вас о небольшой проблеме, которую я имею с определенной программой. Таким образом, в основном программа (консольное приложение) считывает пакеты из других Procees (Program) и доставляет пакеты, чтобы их можно было анализировать. Проблема, с которой я столкнулся, заключается в том, что одна из моих вложенных функций не будет запускаться (полностью). Пример:C# Вложенная функция Wont Trigger

  1. Эта линия лежит в функции Main(). Наряду с остальными, это просто клип

    captureDevice.OnPacketArrival += new  PacketArrivalEventHandler(Program.device_OnPacketArrival); 
    

После чего у меня нет какой-то Console.WriteLine и т.д. Ничего особенного.

  1. device_OnPacketArrival() - функция с некоторыми другими вложенными функциями внутри.

    private static void device_OnPacketArrival(object sender, CaptureEventArgs packet) 
        { 
    
        DateTime date = packet.Packet.Timeval.Date; 
        int length = packet.Packet.Data.Length; 
        .......... 
        Program.ValidateItem(first_db_id, first_bin_id, out char_id, out user_id, out  type, out valid); 
        ............ 
    
  2. Функция, которая вызывает проблемы является: ValidateItem()

    public static void ValidateItem(int item_Id, int item_type, out int char_id, out int user_id, out int type, out int valid) 
    { 
    
        valid = type = user_id = char_id = 0; 
    
        string oString = "SELECT type,char_id,user_id FROM [DB].[dbo].[Table] WHERE id = @item_id"; 
        SqlCommand oCmd = new SqlCommand(oString, Program.s_DB); 
        oCmd.Parameters.AddWithValue("@item_id", item_Id); 
        try 
        { 
         using (SqlDataReader oReader = oCmd.ExecuteReader()) 
         { 
          if (oReader.Read()) 
          { 
           type = Convert.ToInt32(oReader["type"]); 
           char_id = Convert.ToInt32(oReader["char_id"]); 
           user_id = Convert.ToInt32(oReader["user_id"]); 
           if (type == item_type) 
           { 
            valid = 1; 
           } 
           else 
           { 
            valid = 0; 
           } 
    
          } 
    
         } 
        } 
        catch (Exception ex) 
        { 
         Console.WriteLine(ex); 
    
        } 
    
    } 
    

Проблема в том, что только первая строка функции инициализации - действительный = тип = user_id = char_id = 0; Но если я запустил функцию непосредственно в Main(), она работает нормально.

+0

Ваши функции не «вложенными». Они просто звонят друг другу. Чтобы узнать, что происходит в вашем коде, установите точку останова и шаг за шагом, и посмотрите, что произойдет. – mason

+0

, вы как бы оставляете нас слепыми, но моя интуиция заключалась бы в том, чтобы назначить ваш «OnPacketArrival» после того, как все будет готово. В частности, ваша 'Program.s_DB'. – AlexanderBrevig

+0

Хорошо, я просто что-то протестировал, и если я добавлю статические константные значения к функции, в которой он работает, но если я использую переменные, такие как first_bin_id и функция first_db_id, будут работать нормально, что нечетно, учитывая, что все они являются int – user2742982

ответ

1

Не уверен, что если ответ на ваш вопрос но в C# нет «вложенными» функции, если вам нужно создать, что «иллюзия» попробуйте использовать annonymus functions

+0

Исправить. Ну, я не сказал, что вложен. Мой плохой, основной on_packetarrive вызывает другие функции – user2742982

Смежные вопросы