1
我已經實現了自己的客戶端 - 服務器UI框架的事件註冊,就像在ASP.NET中一樣。我在字典中存儲的事件的名稱(如「Click
」),併爲價值記得使用反射調用匿名事件處理程序?
oEventHandler.Method.DeclaringType.AssemblyQualifiedName.ToString() + "." + oEventHandler.Method.Name.
然後重新調用的事件處理程序後,我重新委託:
var oEventHandler = Delegate.CreateDelegate(typeof(BLUIEventHandler), oPage, sEventMethod, false)
並調用它的網頁上:
oEventHandler.Invoke(oPage, this, oEventArgs);
這工作正常事件處理程序,它ASPX頁面的一部分,就像
var oTheButton = new UIButton();
oTheButton.Click += this.HandleClick;
private void HandleClick() {}
,但無法爲匿名委託:
var oTheButton = new UIButton();
oTheButton.Click += delegate {/* Will never be called. */};
對於非匿名委託結果字符串是:
"MyTest.Rene.UI.Foo, BDRS, Version=8.10.1.19703, Culture=neutral, PublicKeyToken=null.HandleClick"
對於匿名委託,它是:
"MyTest.Rene.UI.Foo+<>c__DisplayClass1, MyTest, Version=8.10.1.17866, Culture=neutral, PublicKeyToken=null.<OnInitializeLayout>oTheButton__0"
但是,當我嘗試重新創建匿名委託,我得到一個綁定錯誤。 有沒有辦法回到匿名委託並調用它?
但是Delegate實例是可序列化的嗎?如果事件處理程序位於ASPX頁面上,則頁面在渲染完成後將被卸載。所以我不能存儲一個引用,它會消失。 EventHandlerList如何處理? – Krumelur
@Krumelur它不,因爲如此。就我個人而言,我不會在這裏查看序列化*。請求是孤立的;像這樣對待它。 –
這就是我想要做的。因此,字符串表示。這也是ASP.NET如何做到的。如果它支持匿名代理,我必須嘗試。 – Krumelur