コード例 #1
0
        private async Task CheDo1()
        {
            var lstGui  = (thongTinTaiKhoan_GuiBindingSource.List as IList <ThongTinTaiKhoan>).Where(p => p.Cookie != null);
            var lstNhan = (thongTinTaiKhoan_TimKiemBindingSource.List as IList <ThongTinTaiKhoan>);//.Where(p => string.IsNullOrEmpty(p.TrangThai));

            int soNguoiGui  = lstGui.Count();
            int soNguoiNhan = lstNhan.Count();

            if (soNguoiGui == 0)
            {
                MessageBox.Show("Vui lòng thêm người gửi hoặc kiểm tra lại trạng thái đăng nhập", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                btnGuiTin.Enabled = true;
                XuLyDaLuong.ChangeText(lblTrangThai, "Vui lòng kiểm tra lại thông tin người gửi", Color.Red);
                return;
            }

            if (soNguoiNhan == 0)
            {
                MessageBox.Show("Vui lòng thêm người nhận", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                XuLyDaLuong.ChangeText(lblTrangThai, "Vui lòng chọn người nhận", Color.Red);
                btnGuiTin.Enabled = true;
                return;
            }
            int thoiGianCho;

            if (!int.TryParse(txtThoiGianCho.Text, out thoiGianCho))
            {
                MessageBox.Show("Chưa điền thời gian chờ", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            int index_NguoiGuiHienTai  = 0;
            int index_NguoiNhanHienTai = 0;
            int index_NoiDungHienTai   = 0;

            int soThuSeGui      = Math.Min(lstGui.Sum(p => p.SoTinNhanSeGui), soNguoiNhan);
            int demGui          = 1;
            var danhSachNoiDung = this.DanhSachNoiDung();

            while (index_NguoiGuiHienTai < soNguoiGui && index_NguoiNhanHienTai < soNguoiNhan && !_guiTinNhanTokenResource.IsCancellationRequested)
            {
                ThongTinTaiKhoan nguoiGui = lstGui.ElementAt(index_NguoiGuiHienTai++);
                bool             breakNow = false;
                for (int i = 0; i < nguoiGui.SoTinNhanSeGui; i++)
                {
                    ThongTinTaiKhoan nguoiNhan = lstNhan.ElementAt(index_NguoiNhanHienTai++);
                    if (string.IsNullOrEmpty(nguoiNhan.TrangThai))
                    {
                        thongTinTaiKhoan_TimKiemBindingSource.Position = thongTinTaiKhoan_TimKiemBindingSource.IndexOf(nguoiNhan);
                        XuLyDaLuong.ChangeText(lblTrangThai, string.Format("Đang gửi {0}/{1} {2}...", demGui++, soThuSeGui, nguoiNhan.TenHienThi), Color.Green);
                        var noiDung = danhSachNoiDung[index_NoiDungHienTai];
                        Debug.WriteLine($"Gửi:/r/nTiêu đề:/r/n{this.LayTextTuSpinText(noiDung.TieuDe)}/r/nNội dung:/r/n{this.LayTextTuSpinText(noiDung.NoiDung)}");
                        _guiTinNhan.GuiTin(nguoiGui, nguoiNhan, this.LayTextTuSpinText(noiDung.TieuDe), this.LayTextTuSpinText(noiDung.NoiDung),
                                           (code => {
                            if (code == CONST.TAI_KHOAN_BI_KHOA)
                            {
                                breakNow = true;
                            }
                        }));
                        if (breakNow)
                        {
                            nguoiGui.TrangThai = "Bị khóa";
                            thongTinTaiKhoan_TimKiemBindingSource.EndEdit();
                            grvTaiKhoanGui.RefreshData();
                            grvNguoiNhan.Focus();
                            break;
                        }
                        await Task.Delay(thoiGianCho * 1000);

                        thongTinTaiKhoan_TimKiemBindingSource.EndEdit();
                        grvNguoiNhan.RefreshData();

                        //Chuyển nội dung
                        index_NoiDungHienTai = index_NoiDungHienTai == danhSachNoiDung.Count - 1 ? 0 : index_NoiDungHienTai + 1;
                    }
                    else
                    {
                        //Nếu đã gửi rồi thì không tính
                        i--;
                    }
                    //Nếu hết người nhận thì thoát vòng lặp
                    if (index_NguoiNhanHienTai >= soNguoiNhan)
                    {
                        break;
                    }
                    if (_guiTinNhanTokenResource.IsCancellationRequested)
                    {
                        break;
                    }
                }
            }
            XuLyDaLuong.ChangeText(lblTrangThai, string.Format("Hoàn tất gửi tin ({0}/{1})", demGui - 1, soThuSeGui), Color.Black);
            btnGuiTin.Text      = "Gửi tin nhắn";
            btnGuiTin.BackColor = Color.LightSkyBlue;
        }