[問題] WCF做的聊天程式,連傳兩次有問題

看板C_Sharp作者 (鋼彈)時間12年前 (2012/04/22 17:49), 編輯推噓1(104)
留言5則, 2人參與, 最新討論串1/1
大家好,我做了一個聊天的程式 就是有一個SERVER 然後CLIENT連進來 CLIENT可以傳訊息給對方這樣 問題改一下,應該是這樣 我有兩個finction bool add(Message message); bool notify(Message message); server有個資料結構,用add就是將message存在server 當server有新增或刪除會通知所有client 然後所有client實作void MessageAdded(Message message); 然後會在這做事 server的add長這樣 bool add(Message message) { if(addSuccess()) { Publish(message); return true; } return false; } notify也差不多 不過是通知某個client而已 我的程式中有個片段是 add(message1); notify(message2); 現在問題是 先用add再用notify會出現timeout(停在notify) 先用notify再用add就沒問題 剛剛debug過正常add會add完然後收到事件而跑到MessageAdd 但是如果是先add再notify add完MessageAdded事件還沒出現就先到notify 應該是這樣導致我的問題發生 請問這是什麼原因?有什麼解決方法嗎?謝謝! 找到問題了,問題是用ui thread調用add()的時候 ui thread 會被鎖住 這裡server callback (publish)回來的時候發現ui thread鎖住了 所以只能等在那邊,造成deadlock 最快的解決方法就是在實作client上面加上 [CallbackBehavior(UseSynchronizationContext = false)] 這個屬性 詳情請參考下面網址: http://blogs.msdn.com/b/mahjayar/archive/2006/11/07/winfx-usesynchronizationcontext-usage.aspx 縮址:http://ppt.cc/7o4s -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.230.183

04/23 04:10, , 1F
你不把notify裡面的東西丟上來很難判斷
04/23 04:10, 1F

04/23 04:11, , 2F
如果懶得找問題我建議用http://ppt.cc/,qGh 比較不浪
04/23 04:11, 2F

04/23 04:11, , 3F
費時間
04/23 04:11, 3F

04/23 08:54, , 4F
謝謝!
04/23 08:54, 4F
※ 編輯: gundan 來自: 118.163.30.37 (04/23 16:12) ※ 編輯: gundan 來自: 118.163.30.37 (04/23 16:43)

04/23 16:44, , 5F
問題改過了,有人碰過這樣的問題嗎?謝謝!
04/23 16:44, 5F
※ 編輯: gundan 來自: 118.163.30.37 (04/24 10:33)
文章代碼(AID): #1FazGgnP (C_Sharp)