我有一個很大的問題。當我在Windows窗體中實現一個SqlDependency監視器時,只要我調用我的「OnChance」事件到ui線程,一切正常。如何在類中使用SqlDependency?
private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
{
if (this.InvokeRequired)
{
OnChangeEventHandler tempDelegate = new OnChangeEventHandler(dependency_OnChange); object[] args = { sender, e };
this.Invoke(tempDelegate, args);
return;
}
SqlDependency dependency = (SqlDependency)sender;
dependency.OnChange -= dependency_OnChange;
SetSqlWatcher();
}
如果我提出我的方法的一類,我不能做調用和InvokeRequired,因爲我的課沒有實現ISynchronizeInvoke。如果我評論這行,該程序在「SetSqlWatcher」掛在第一行:
SqlDependency.Stop("Data Source=[....]");
當我評論的windowsform這些線路同樣的情況,所以我覺得_OnChance事件是在不同的線程比我在第一次調用SetSqlWatcher時使用的「線程」。
我也嘗試實現ISynchronizeInvoke(藉助於庫裏的GenericSynchronizingObject http://nitoasync.codeplex.com)。我調試,看到代碼必須第一次調用它,但它也掛在「SqlDependency.Stop」...
是有人能夠幫助我,也許解釋我爲什麼這不能工作?
非常感謝! 最好的問候 托馬斯