[問題] WCF做的聊天程式,連傳兩次有問題
大家好,我做了一個聊天的程式
就是有一個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
04/23 04:10, 1F
→
04/23 04:11, , 2F
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)