Привет, я хотел бы спросить вас о небольшой проблеме, которую я имею с определенной программой. Таким образом, в основном программа (консольное приложение) считывает пакеты из других Procees (Program) и доставляет пакеты, чтобы их можно было анализировать. Проблема, с которой я столкнулся, заключается в том, что одна из моих вложенных функций не будет запускаться (полностью). Пример:C# Вложенная функция Wont Trigger
Эта линия лежит в функции Main(). Наряду с остальными, это просто клип
captureDevice.OnPacketArrival += new PacketArrivalEventHandler(Program.device_OnPacketArrival);
После чего у меня нет какой-то Console.WriteLine и т.д. Ничего особенного.
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); ............
Функция, которая вызывает проблемы является: 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(), она работает нормально.
Ваши функции не «вложенными». Они просто звонят друг другу. Чтобы узнать, что происходит в вашем коде, установите точку останова и шаг за шагом, и посмотрите, что произойдет. – mason
, вы как бы оставляете нас слепыми, но моя интуиция заключалась бы в том, чтобы назначить ваш «OnPacketArrival» после того, как все будет готово. В частности, ваша 'Program.s_DB'. – AlexanderBrevig
Хорошо, я просто что-то протестировал, и если я добавлю статические константные значения к функции, в которой он работает, но если я использую переменные, такие как first_bin_id и функция first_db_id, будут работать нормально, что нечетно, учитывая, что все они являются int – user2742982