private void OnSendCompleted() { if (SendCompleted != null) { SendCompleted.Invoke(this, new EventArgs()); } }
protected void OnSendCompleted(AsyncCompletedEventArgs e) { if (SendCompleted != null) { SendCompleted.Invoke(this, e); } }
private void OnSendToGame(string address, byte[] data) { if (SendCompleted != null) { //分发到游戏服 SendCompleted.BeginInvoke(address, data, null, null); } }
public void Send() { var emailServer = new EmailServer(); _pendings.AsParallel().ForAll(m => { emailServer.Send(m); SendCompleted?.Invoke(this, m); }); }
private void SendItems(List <SendItem> sendItemList) { if (sendItemList.Count < 0) { return; } var historyGroup = _liteDb.Database.GetCollection <HistoryGroup>().FindById(_currentHistoryGroupId); // 添加到栈中 Stack <SendItem> sendItemStack = new Stack <SendItem>(); // 栈是先进后出,所以要倒转一下 sendItemList.Reverse(); sendItemList.ForEach(item => sendItemStack.Push(item)); // 获取发件人 List <SendBox> senders = _liteDb.Fetch <SendBox>(sb => historyGroup.senderIds.Contains(sb._id)); // 开始发送邮件,采用异步进行发送 // 一个发件箱对应一个异步 List <SendThread> sendThreads = senders.ConvertAll(sender => { var sendThread = new SendThread(_userId, sender, _liteDb); sendThread.SendCompleted += SendThread_SendCompleted; return(sendThread); }); // 开始运行 Task.WhenAll(sendThreads.ConvertAll(st => st.Run(sendItemStack))).ContinueWith((task) => { // 执行回调 // 发送关闭命令 SendStatus = SendStatus.SendFinish; // 对于已经完成的,要更新数据的状态 var history = _liteDb.SingleById <HistoryGroup>(_currentHistoryGroupId); if (history != null) { // 更新状态 history.sendStatus = SendStatus.SendFinish; _liteDb.Update(history); } // 发送完成数据 SendingProgressInfo = new SendingProgressInfo() { historyId = _currentHistoryGroupId, index = sendItemList.Count, total = sendItemList.Count, }; SendCompleted?.Invoke(); }); }
private void ProcessSend(SocketAsyncEventArgs e) { if (e.SocketError == SocketError.Success) { SendCompleted?.Invoke(this, null); OnSending(); } else { CloseClientSocket(e); } }
protected void OnSendCompleted(string clientAddress, byte[] data) { if (SendCompleted != null) { string successMsg = string.Format("{0}>>准备发送到{1}的字节数:{2}byte...", DateTime.Now.ToString("HH:mm:ss:ms"), clientAddress, data.Length); SendCompleted.BeginInvoke(clientAddress, data, ar => { string address = ar.AsyncState as string; Console.WriteLine(address); }, successMsg); } }
public void SendAsync(string message, object userState) { Task.Factory.StartNew( () => { Thread.Sleep(1000); SendCompleted?.Invoke( this, new SendCompletedEventArgs(null, false, userState) { Response = "Test", }); }, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default); }
private void EndSend(IAsyncResult result) { SocketAsyncState state = (SocketAsyncState)result.AsyncState; //是否完成 state.Completed = Handler.EndSend(result); //没有完成则断开Socket连接 if (!state.Completed) { Disconnected(true); } //引发发送结束事件 if (state.IsAsync) { SendCompleted?.Invoke(this, new SocketEventArgs(this, SocketAsyncOperation.Send) { Data = state.Data }); } }
private void EndSend(IAsyncResult result) { SocketAsyncState state = (SocketAsyncState)result.AsyncState; //是否完成 state.Completed = Handler.EndSend(result); //没有完成则断开Socket连接 if (!state.Completed) { Disconnected(true); } //引发发送结束事件 if (state.IsAsync) { if (DataSender.Status != SocketDataSender.SenderStatus.Preparing && DataSender.Status != SocketDataSender.SenderStatus.Sending) { SendCompleted?.Invoke(this, new SocketEventArgs(this, SocketAsyncOperation.Send) { Data = state.Data }); } else { DataSender.SendCompleted(this, new SocketEventArgs(this, SocketAsyncOperation.Send) { Data = state.Data }); if (DataSender.Status == SocketDataSender.SenderStatus.Ready) { SendCompleted?.Invoke(this, new SocketEventArgs(this, SocketAsyncOperation.Send) { Data = DataSender.FullData }); } } } }
// 开始发件 public Task Run(Stack <SendItem> sendItems) { // 创建线程 Task task = Task.Run(async() => { while (sendItems.Count > 0) { // 开始并行发送 //确定smtp服务器地址 实例化一个Smtp客户端 SmtpClient smtpclient = new SmtpClient(); smtpclient.Host = _sendBox.smtp; //smtpClient.Port = "";//qq邮箱可以不用端口 //邮件发送方式 通过网络发送到smtp服务器 smtpclient.DeliveryMethod = SmtpDeliveryMethod.Network; //如果服务器支持安全连接,则将安全连接设为true smtpclient.EnableSsl = true; // 获取发件箱 var sendItem = sendItems.Pop(); var mailMessage = await GenerateMailMessage(sendItem); try { //是否使用默认凭据,若为false,则使用自定义的证书,就是下面的networkCredential实例对象 smtpclient.UseDefaultCredentials = false; //指定邮箱账号和密码,需要注意的是,这个密码是你在QQ邮箱设置里开启服务的时候给你的那个授权码 NetworkCredential networkCredential = new NetworkCredential(_sendBox.email, _sendBox.password); smtpclient.Credentials = networkCredential; //发送邮件 smtpclient.Send(mailMessage); // 发送成功后,更新数据,更新到数据库 sendItem.senderEmail = _sendBox.email; sendItem.senderName = _sendBox.userName; sendItem.isSent = true; sendItem.sendMessage = "邮件送达"; sendItem.sendDate = DateTime.Now; _liteDb.Upsert(sendItem); // 更新到当前进度中 SendCompleted?.Invoke(new SendResult() { SendBox = _sendBox, SendItem = sendItem, IsSent = true, }); // 保存成功的发件量 if (!_sendBox.IncreaseSentCount(_liteDb, _setting)) { // 直接退出 return; } } catch (Exception ex) { // 超过最大尝试次数就退出 if (sendItem.tryCount > 5) { // 此时也要更新进度 SendCompleted?.Invoke(new SendResult() { SendBox = _sendBox, SendItem = sendItem, IsSent = false }); } else if (_setting.isAutoResend) // 重新发送时,才重新推入栈中 { // 更新状态 sendItem.tryCount++; sendItem.isSent = false; // 重新推入栈中 sendItems.Push(sendItem); } // 添加失败原因 if (ex.InnerException == null) { sendItem.sendMessage = ex.Message; } else { sendItem.sendMessage = ex.InnerException.Message; } _liteDb.Upsert(sendItem); // 标记当前邮件失败次数 // 要等数据处理保存后,再更新 IncreaseFailure(); } finally { // 每次发送完成,要等待一会儿再发送 double sleep = new Random().NextDouble() * 3 + 2; if (_setting != null) { sleep = _setting.sendInterval_min + new Random().NextDouble() * (_setting.sendInterval_max - _setting.sendInterval_min); } // 线程暂停 Thread.Sleep((int)(sleep * 1000)); } } }, _cancellationTokenSource.Token); return(task); }
private void Socket_SendCompleted(object sender, TcpCompletedEventArgs e) { SendCompleted?.Invoke(sender, e); }
/// <summary> /// Invokes the SendCompleted event. /// </summary> /// <param name="sender_">The entity invoking the event</param> /// <param name="args_">The completed event args</param> protected virtual void OnSendCompleted(object sender_, AsyncCompletedEventArgs args_) { SendCompleted?.Invoke(sender_, args_); }
/// <summary> /// 异步发信时发完以后的操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void client_SendCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) { SendCompleted?.Invoke(sender, e); }
private void TrySend(IAsyncResult ar) { var size = Socket.EndSend(ar); SendCompleted?.Invoke(this, new TcpCompletedEventArgs(size)); }
private void ClientSendCompleted(object sender, AsyncCompletedEventArgs e) { SendCompleted?.Invoke(sender, e); Dispose(); }
//向客户端发送数据完成 private void client_SendCompleted(object sender, SocketEventArgs e) { SendCompleted?.Invoke(this, e); }
/// <summary> /// Event invoker /// </summary> protected virtual void OnSendCompleted() { SendCompleted?.Invoke(); }
protected void OnSendCompleted(AsyncCompletedEventArgs e) { SendCompleted?.Invoke(this, e); }
//向客户端发送数据完成 private void client_SendCompleted(object sender, byte[] e) { SendCompleted?.Invoke(this, e); }