Открытие и закрытие соединения занимает много времени. И используйте «использование», как предложил другой член. Я немного изменил код, но поставил SQL-создание и открытие и закрытие OUTSIDE вашей петли. Который должен немного ускорить выполнение.
static void Main()
{
EventLog alog = new EventLog();
alog.Log = "Application";
alog.MachineName = ".";
/* ALSO: USE the USING Statement as another member suggested
using (SqlConnection connection1 = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True")
{
using (SqlCommand comm = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ", connection1))
{
// add the code in here
// AND REMEMBER: connection1.Open();
}
}*/
SqlConnection connection1 = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=syslog2;Integrated Security=True");
SqlDataAdapter cmd = new SqlDataAdapter();
// Do it one line
cmd.InsertCommand = new SqlCommand("INSERT INTO Application VALUES (@EventLog, @TimeGenerated, @EventType, @SourceName, @ComputerName, @InstanceId, @Message) ", connection1);
// OR YOU CAN DO IN SEPARATE LINE :
// cmd.InsertCommand.Connection = connection1;
connection1.Open();
// CREATE YOUR SQLCONNECTION ETC OUTSIDE YOUR FOREACH LOOP
foreach (EventLogEntry entry in alog.Entries)
{
cmd.InsertCommand.Parameters.Add("@EventLog", SqlDbType.VarChar).Value = alog.Log;
cmd.InsertCommand.Parameters.Add("@TimeGenerated", SqlDbType.DateTime).Value = entry.TimeGenerated;
cmd.InsertCommand.Parameters.Add("@EventType", SqlDbType.VarChar).Value = entry.EntryType;
cmd.InsertCommand.Parameters.Add("@SourceName", SqlDbType.VarChar).Value = entry.Source;
cmd.InsertCommand.Parameters.Add("@ComputerName", SqlDbType.VarChar).Value = entry.MachineName;
cmd.InsertCommand.Parameters.Add("@InstanceId", SqlDbType.VarChar).Value = entry.InstanceId;
cmd.InsertCommand.Parameters.Add("@Message", SqlDbType.VarChar).Value = entry.Message;
int rowsAffected = cmd.InsertCommand.ExecuteNonQuery();
}
connection1.Close(); // AND CLOSE IT ONCE, AFTER THE LOOP
}
Вы ищете эти TWinControl.Controls
массив и сопровождение ControlCount
свойство. Это для непосредственных детей управления. Для получения внуков и т.д. используйте стандартные рекурсивные методы.
Вы действительно не хотите Components
массив (который является тем, чего for
- in
цикл выполняет итерации), так как ему нечего делать, в целом, с отношениями отцов и детей. Компоненты могут владеть вещами, которые не имеют никаких дочерних отношений, и средства управления могут иметь дочерние элементы, которыми они не владеют.
Также примечание, что отключение управления неявно отключает всех своих детей, также. Вы не можете взаимодействовать с детьми отключенного управления; ОС не отправляет входные сигналы им. Для создания их взгляд отключенный, тем не менее, необходимо будет отключить их отдельно. Таким образом, чтобы заставить кнопку иметь grayed текст, недостаточно отключить его родителя, даже при том, что кнопка не ответит на щелчки мышью. Необходимо отключить саму кнопку, чтобы заставить его нарисовать себя "отключено".
Если Вы отключаете панель, al средства управления на нем отключены также.
Рекурсивное решение с анонимными методами:
type
TControlProc = reference to procedure (const AControl: TControl);
procedure TForm6.ModifyControl(const AControl: TControl;
const ARef: TControlProc);
var
i : Integer;
begin
if AControl=nil then
Exit;
if AControl is TWinControl then begin
for i := 0 to TWinControl(AControl).ControlCount-1 do
ModifyControl(TWinControl(AControl).Controls[i], ARef);
end;
ARef(AControl);
end;
procedure TForm6.Button1Click(Sender: TObject);
begin
ModifyControl(Panel1,
procedure (const AControl: TControl)
begin
AControl.Enabled := not Panel1.Enabled;
end
);
end;
result == true
мой главный объект неприязни.== true
неявно. Если you' ре ища расширенную удобочитаемость I' d предлагают назвать Ваши переменные в честь того, что они представляют. пример:bool? isOK = myWindow.Dialog(); if (isOK ?? false) { ... }
– MetaFight 27 April 2012 в 20:16