Вроде бы все просто:
Делаем таблицу для хранения сообщений, пишем функции для отправки и получения, и через listen и notify организуем оповещения о поступлении сообщения. Серверная часть вроде заработала быстро, а вот с клиентом возникли затруднения.
В FormLoad написали:
NpgsqlCommand listener = new NpgsqlCommand("listen "+ username,this.npgsqlConnection1);
listener.ExecuteNonQuery();<
this.npgsqlConnection1.Notification += new NotificationEventHandler(npgsqlConnection1_Notification);
И в обработчике сообщения:
NpgsqlCommand getmes = new NpgsqlCommand("select _функция_забора_сообщения_();", this.npgsqlConnection1);
MessageBox.Show(getmes.ExecuteScalar().ToString(), "Срочное сообщение");
Сообщение получалось почему то далеко не всегда, не смотря на то, что соединение использовало SyncNotification, и при закрытии конекшена прога подвисала, при этом сам NPGSQL не вызывал никаких эксепшенов.
Немного порывшись в инете обнаружил какую то пространную фразу о thread'инге и переписал все так:
Thread thread_new = new Thread(delegate()
{
NpgsqlCommand getmes = new NpgsqlCommand("select _функция_забора_сообщения_();", this.npgsqlConnection1);
MessageBox.Show(getmes.ExecuteScalar().ToString(), "Срочное сообщение");
});
thread_new.Start();
После чего эксепшен отловлен и был.
Видимо, я снова что-то не дочитал в документации к NPGSQLю.
Комментариев нет:
Отправить комментарий