/// <summary> /// Метод закрытия нейронной сети и обновления интерфейса соответствующим образом. /// </summary> void ResetNN() { // Изменение интерфейса: LabelImage.Visible = false; PictureImage.Visible = false; LabelNeuronet.Visible = false; PictureNeuronet.Visible = false; ToolSave.Enabled = false; ToolClose.Enabled = false; ToolRefresh.Enabled = false; ToolName.Enabled = false; ToolImage.Enabled = false; ToolImage.Text = ""; ToolAddImage.Enabled = false; ToolDeleteImage.Enabled = false; ToolImgRcg.Enabled = false; LabelStatus.Text = "Нейронная сеть отсутствует."; LabelStatus.Visible = true; FormImgRcg_Resize(null, null); // Освобождение ресурсов системы: IRNN1 = null; // Обнуляем указатель, а ресурсы удалит сборщик мусора. if (BgrpImage != null) { BgrpImage.Dispose(); BgrpImage = null; } if (BgrpNeuronet != null) { BgrpNeuronet.Dispose(); BgrpNeuronet = null; } //GC.Collect(); // Это принудительная сборка мусора. Является плохим тоном программирования (так в книге писали). Незнаю. }
/// <summary> /// Метод обновления основного экрана. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ToolRefresh_Click(object sender, EventArgs e) { if (IRNN1 != null) // Проверяем наличие того, что будем обновлять, а именно - нейросеть с библиотекой образов. { Cursor = Cursors.WaitCursor; // Изменение курсора в занятое состояние. ClassIRNN1.ComputeNeuronet(ref IRNN1.m_CurrentNeuronet); // Вычисляем возбужденность нейронов основной нейросети. ClassIRNN1.DrawNeuronet(ref IRNN1.m_CurrentNeuronet, BgrpNeuronet.Graphics, 20.0f, 20.0f, 0.0f); // Отрисовываем состояние нейросети. BgrpImage.Render(); BgrpNeuronet.Render(); Cursor = Cursors.Default; } }
/// <summary> /// Метод отрисовки компонента с состоянием нейронной сети. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void NNStatus_Paint(object sender, PaintEventArgs e) { BgrpNeuronet.Render(); // Выводим на экран содержимое графического буфера. }