2016-04-15 1 views
0

У меня есть приложение Windows Form, в котором используется событие Notifier for capture SQLDependency с Entity Framework, и все работает нормально. EntityChangeNotifier - это проект, который разрабатывает SQLDependency.Продолжить прослушивание SQLDependency

Уит вызов while (true) я могу иметь продолжать слушать и, когда у меня есть изменения кода в notifer.Changed += (sender, e)

 private StartNotifier() 
     { 
      var info = new SABIntegrationEntities(); 
      // Notifier 
      using (var notifer = new EntityChangeNotifier<SpRicezioneSpedizioniLightNotifier, GemapDbContext>(p => p.SPEDIZIONE_STATO_GENERAZIONE == "I" || p.SPEDIZIONE_STATO_GENERAZIONE == "U")) 
      { 
       notifer.Error += (sender, e) => 
       { 
        Log.Error(String.Format("[{0}, {1}, {2}]:\n{3}", e.Reason.Info, e.Reason.Source, e.Reason.Type, e.Sql)); 
       }; 
       notifer.Changed += (sender, e) => 
       { 
        e.ContinueListening = false; 
        bool result = true; 
        var spedizioniI = info.SpRicezioneSpedizioniLights.Where(x => x.SPEDIZIONE_STATO_GENERAZIONE == "I" || x.SPEDIZIONE_STATO_GENERAZIONE == "U"); 
        foreach (var p in spedizioniI) 
         { 
          p.SPEDIZIONE_STATO_GENERAZIONE = "G"; 
         } 
        } 
        e.ContinueListening = true; 
       }; 
       while (true) 
       { 
       } 
      } 
     } 

Я хочу иметь продолжать слушать в этом коде лучше, чем то время (правда). Как мне это сделать?

Если вы хотите, вы можете найти полную структуру проекта здесь: enter link description here

поблагодарить всех

ответ

1

Ваше заявление с помощью избавляется notifer при выходе StartNotifier метода. Удалите с помощью и пока статуты, поставьте notifer как личное поле класса, реализуйте интерфейс IDisposable и удалите notifer в Dispose методе. Вы должны получать сообщения, пока ваш класс, содержащий метод StartNotifier, не будет удален.

EDIT: Фрагмент кода, чтобы дать вам идею:

public partial class Form1 : Form 
{ 
    private readonly EntityChangeNotifier<SpRicezioneSpedizioniLightNotifier, GemapDbContext> _entityChangeNotifier; 
    public Form1() 
    { 
     InitializeComponent(); 
     _entityChangeNotifier = StartNotifier(); 
    } 

    private EntityChangeNotifier<SpRicezioneSpedizioniLightNotifier, GemapDbContext> StartNotifier() 
    { 
     var notifer = new EntityChangeNotifier<SpRicezioneSpedizioniLightNotifier, GemapDbContext>(
      p => p.SPEDIZIONE_STATO_GENERAZIONE == "I" || p.SPEDIZIONE_STATO_GENERAZIONE == "U"); 
     notifer.Error += (sender, e) => { /*log*/ }; 
     notifer.Changed += (sender, e) => { /*action when chagned*/}; 
     return notifer; 
    } 
    protected override void Dispose(bool disposing) 
    { 
     if (disposing && (components != null)) 
     { 
      components.Dispose(); 
      _entityChangeNotifier.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 
} 
+0

Можете ли вы помочь мне с кодом пожалуйста? – Ale

+1

@Ale: см. Мое редактирование. –

+0

Спасибо за ваш ответ. Как я могу удалить единственный уведомитель и повторно активировать новый уведомитель, если у меня есть ошибка? Я хочу перезапустить уведомление автоматически, если у меня такая же ошибка в прослушивании. – Ale