※ 引述《jodo1984 (XDDD)》之銘言:
: 首先感謝您抽空另外寫一支程式讓我參考
: 不過有點抱歉畢竟我c#功力還沒有那麼深厚很多地方看不太懂, 想請問一下
: 1. 這個是甚麼意思
: EventHandler<SpeedEventArgs> handler =Interlocked.CompareExchange(ref
: this._tooSlowHandler, null, null);
CompareExchange有三個參數 分別是location1 value comparand
如果location1(第一個)與comparand(第三個)相等就用value(第二個)把location1取代掉
回傳值是location1的原始值
這裡只是要用Interlocked來做執行緒安全的讀取
: 2.請問您怎麼沒有用到委派而是用執行續, 如果要使用事件不需要搭配委派嗎?
private EventHandler<SpeedEventArgs> _tooFastHandler;
private EventHandler<SpeedEventArgs> _tooSlowHandler;
這兩個就是私有實體委派欄位 拿來放方法
只是我使用了系統內建拿來放事件處理常式的泛型委派
: 3.我用debug模式car.Speed 好像數值沒有傳入 如果我要將數值傳入需要怎麼修正?
: private void TooFast(object o, SpeedEventArgs e)
: {
: var car = o as Car;
: if (car != null)
: {
: MessageBox.Show(string.Format("{0}目前的速度為{1},超過200,請
減
: 速慢行", car.Name, car.Speed));
: }
: }
: private void TooSlow(object o, SpeedEventArgs e)
: {
: var car = o as Car;
: if (car != null)
: {
: MessageBox.Show(string.Format("{0}目前行駛速度{1},已低於限速
: 80,請加速行駛",car.Name, car.Speed));
: }
: }
我用文章內的程式碼
下中斷點在private void TooFast(object o, SpeedEventArgs e)下的那個花括號
速度設300 會中斷 您可再試試
: 4. 請問有推薦C#書籍嗎?
初階的話 就到書店找本看得懂的 照著做
進階的話 CLR via C# 與 C# in Depth 這兩本都對C#進階的機制說明得很好