Обработчик события не реагирует на событие? - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс для работы с Sql-соединением. В нем есть обработчик события изменения состояния соединения, который использует делегат на метод главной формы, метод должен изменять текст на кнопке "соединиться". Кода довольно много, с вашего позволения залью на pastebin. Если таки необходимо вставлять код прямо сюда, то сделаю. http://pastebin.com/ddzCxYK5 В отрывке кода приведен сам обработчик событий и метод ConnectionManager, запускающий соединение в отдельном потоке.

MainFormEnableControls

это ссылка на метод в главной форме, который в зависимости от полученных значений отключает контролы для работы с бд и еще кое что по мелочи. Проблема в том, что задуманная схема отлично работает, когда соединение открывается или закрывается, однако когда статус соединения меняется на ConnectionState.Connecting мне не удалось никоим образом добиться срабатывания обработчика, видно, что поток управления даже не заходит туда, т.к. не отображается MessageBox'ы если их туда поместить. Что я делаю не так?

Решение задачи: «Обработчик события не реагирует на событие?»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Data.SqlClient;
 
 
namespace ConsoleApplication45
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnection myConnection = new SqlConnection();
            myConnection.ConnectionString =
            @"Data Source=YAR\SQLEXPRESS;Initial Catalog=AutoLot;Integrated Security=True;Pooling=False";
            myConnection.StateChange += (s, e) =>
                {
                    switch (e.CurrentState)
                    {
                        case System.Data.ConnectionState.Closed:
                            Console.WriteLine("Connection closed!");
                            break;
                        case System.Data.ConnectionState.Open:
                            Console.WriteLine("Connection opened!");
                            break;
                        default:
                            break;
                    }
                };
            Thread t1 = new Thread(new ThreadStart(delegate 
                {
                    myConnection.Open();
                }));
            t1.Start();
            Thread.Sleep(5000);
            myConnection.Close();
            Console.ReadLine();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы