public string[] Join(string name) { bool userAdded = false; myEventHandler = new ChatEventHandler(MyEventHandler); //将MyEventHandler方法作为参数传递给委托 lock (syncObj) //线程的同步性,同步访问多个线程的任何变量,利用lock(独占锁),确保数据访问的唯一性。 { if (!chatters.ContainsKey(name) && name != "" && name != null) { this.name = name; chatters.Add(name, MyEventHandler); userAdded = true; } } if (userAdded) { callback = OperationContext.Current.GetCallbackChannel <IMyMessageCallback>(); //获取当前操作客户端实例的通道给IChatCallback接口的实例callback,此通道是一个定义为IChatCallback类型的泛类型,通道的类型是事先服务契约协定好的双工机制。 ChatEventArgs e = new ChatEventArgs(); //实例化事件消息类ChatEventArgs e.msgType = MessageType.UserEnter; e.name = name; BroadcastMessage(e); ChatEvent += myEventHandler; string[] list = new string[chatters.Count]; //以下代码返回当前进入聊天室成员的称列表 lock (syncObj) { chatters.Keys.CopyTo(list, 0);//将字典中记录的用户信息复制到数组中返回。 } return(list); } else { return(null); } }
private void ThreadCallback(object callback) { IMyMessageCallback messageCallback = callback as IMyMessageCallback; for (int i = 0; i < 10; i++) { messageCallback.OnCallback("message " + i.ToString()); Thread.Sleep(1000); } }
private async void TaskCallback(object callback) { IMyMessageCallback messageCallback = callback as IMyMessageCallback; for (int i = 0; i < 10; i++) { messageCallback.OnCallback($"message {i}"); await Task.Delay(1000); } }
public void MessageToServer(string message) { Console.WriteLine($"message from the client: {message}"); IMyMessageCallback callback = OperationContext.Current. GetCallbackChannel <IMyMessageCallback>(); callback.OnCallback("message from the server"); Task.Factory.StartNew(new Action <object>(TaskCallback), callback, TaskCreationOptions.LongRunning); }
public void MessageToServer(string message) { Console.WriteLine("message from the client: {0}", message); IMyMessageCallback callback = OperationContext.Current. GetCallbackChannel <IMyMessageCallback>(); callback.OnCallback("message from the server"); new Thread(ThreadCallback).Start(callback); }
public void MessageToServer(string message) { WriteLine($"message from the client: {message}"); IMyMessageCallback callback = OperationContext.Current. GetCallbackChannel <IMyMessageCallback>(); callback.OnCallback("message from the server"); Task.Run(() => TaskCallback(callback)); }
public void MessageToServer(string message) { Console.WriteLine("message from the client: {0}", message); IMyMessageCallback callback = OperationContext.Current. GetCallbackChannel <IMyMessageCallback>(); callback.OnCallback("message from the server"); Task.Factory.StartNew(new Action <object>(TaskCallback), callback); // new Thread(ThreadCallback).Start(callback); }