/// <summary> /// キャンセルされるまでの間イベントを購読する。 /// </summary> public static void SubscribeUntil <T>(this IAsyncEvent <T> e, CancellationToken ct, AsyncHandler <T> handler) { var d = e.Subscribe(handler); ct.Register(d.Dispose); }
protected DuplexSessionBase() { async_method = new AsyncHandler(CloseOutputSession); Id = new UniqueId().ToString(); }
/// <summary> /// イベントを購読する。 /// </summary> public static IDisposable Subscribe <T>(this IAsyncEvent <T> e, AsyncHandler <T> handler) { e.Add(handler); return(Disposable.Create(() => e.Remove(handler))); }
/// <summary> /// 联系人换部门或换公司 /// </summary> /// <param name="oldDepartmentId">旧部门ID</param> /// <param name="newDepartmentId">新部门ID</param> public void UserChangeDepartemnt(string oldDepartmentId, string newDepartmentId) { AsyncHandler.AsyncCall(Application.Current.Dispatcher, () => { if (dicExpanderNode == null || dicExpanderNode.Count <= 0) { return; } if (!string.IsNullOrEmpty(oldDepartmentId)) { var departemntExpander = dicExpanderNode.Keys.FirstOrDefault(m => m.Tag != null && (string)m.Tag == oldDepartmentId); //如果部门节点已展开,变更成员列表,否则只变更成员数量 if (departemntExpander != null) { var departemntStackPanel = departemntExpander.Content as StackPanel; var node = dicExpanderNode[departemntExpander]; if (node.IsLoaded) { //var tempContactInfo = ContactInfoViewModelList.FirstOrDefault(m => m.User != null && m.User.userId == userId); //if (tempContactInfo != null) // ContactInfoViewModelList.Remove(tempContactInfo); RecursionLoadSource(departemntStackPanel, oldDepartmentId, node.Level); } var count = GetContactsCount(oldDepartmentId); var departInfo = AntSdkService.AntSdkListContactsEntity.departs.FirstOrDefault( m => m.departmentId == oldDepartmentId); if (departInfo != null) { departemntExpander.Header = departInfo.departName + "(" + count + ")"; if (!string.IsNullOrEmpty(departInfo.parentDepartId)) { DepartmentMembersCountUpdate(departInfo.parentDepartId); } } } else { var departInfo = AntSdkService.AntSdkListContactsEntity.departs.FirstOrDefault( m => m.departmentId == oldDepartmentId); if (departInfo != null) { if (string.IsNullOrEmpty(departInfo.parentDepartId)) { //var parentDepartemntExpander = // dicExpanderNode.Keys.FirstOrDefault( // m => m.Tag != null && (string)m.Tag == departInfo.parentDepartId); //var parentDepartInfo = // AntSdkService.AntSdkListContactsEntity.departs.FirstOrDefault( // m => m.departmentId == departInfo.parentDepartId); //if (parentDepartemntExpander != null && parentDepartInfo != null) //{ // var count = GetContactsCount(parentDepartInfo.departmentId); // parentDepartemntExpander.Header = parentDepartInfo.departName + "(" + count + ")"; //} DepartmentMembersCountUpdate(departInfo.parentDepartId); } } } } if (string.IsNullOrEmpty(newDepartmentId)) { return; } //用户被移到新部门 var newDepartemntExpander = dicExpanderNode.Keys.FirstOrDefault(m => m.Tag != null && (string)m.Tag == newDepartmentId); //如果部门节点已展开,变更成员列表,否则只变更成员数量 if (newDepartemntExpander != null) { var departemntStackPanel = newDepartemntExpander.Content as StackPanel; var node = dicExpanderNode[newDepartemntExpander]; if (node.IsLoaded) { //var tempContactInfo = ContactInfoViewModelList.FirstOrDefault(m => m.User != null && m.User.userId == userId); //if (tempContactInfo != null) // ContactInfoViewModelList.Remove(tempContactInfo); RecursionLoadSource(departemntStackPanel, newDepartmentId, node.Level); } var count = GetContactsCount(newDepartmentId); var departInfo = AntSdkService.AntSdkListContactsEntity.departs.FirstOrDefault( m => m.departmentId == newDepartmentId); if (departInfo == null) { return; } { newDepartemntExpander.Header = departInfo.departName + "(" + count + ")"; if (string.IsNullOrEmpty(departInfo.parentDepartId)) { return; } DepartmentMembersCountUpdate(departInfo.parentDepartId); } } else { var departInfo = AntSdkService.AntSdkListContactsEntity.departs.FirstOrDefault( m => m.departmentId == newDepartmentId); if (departInfo == null) { return; } if (!string.IsNullOrEmpty(departInfo.parentDepartId)) { return; } { DepartmentMembersCountUpdate(departInfo.parentDepartId); //var parentDepartemntExpander = dicExpanderNode.Keys.FirstOrDefault(m => m.Tag != null && (string)m.Tag == departInfo.parentDepartId); //var parentDepartInfo = AntSdkService.AntSdkListContactsEntity.departs.FirstOrDefault(m => m.departmentId == departInfo.parentDepartId); //if (parentDepartemntExpander != null && parentDepartInfo != null) //{ // var count = GetContactsCount(parentDepartInfo.departmentId); // parentDepartemntExpander.Header = parentDepartInfo.departName + "(" + count + ")"; //} } } }); }
/// <summary> /// 分页查询投票数据 /// </summary> private void LoadVotesData() { AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { var errCode = 0; var errMsg = string.Empty; AntSdkGetGroupActivitysInput intput = new AntSdkGetGroupActivitysInput { groupId = _groupId, activityStatus = 0, pageNum = _page, pageSize = _size, userId = AntSdkService.AntSdkCurrentUserInfo.userId }; var activityList = AntSdkService.GetGroupActivitys(intput, ref errCode, ref errMsg); return(activityList); }, (ex, datas) => { ActivityInfoList.Clear(); if (datas?.list != null && datas.list.Count > 0) { foreach (var activityInfo in datas.list) { var tempInfoModel = new ActivityInfoModel(); tempInfoModel.IsHaveActivity = activityInfo.voteFlag; if (activityInfo.userId == AntSdkService.AntSdkCurrentUserInfo.userId) { tempInfoModel.IsbtnDeleteVisibility = true; } tempInfoModel.ActivityId = activityInfo.activityId; tempInfoModel.ActivitySate = activityInfo.activityStatus == 2; tempInfoModel.ActivityTitle = activityInfo.theme; AntSdkContact_User user = AntSdkService.AntSdkListContactsEntity.users.Find(c => c.userId == activityInfo.userId); if (user != null) { if (!string.IsNullOrEmpty(activityInfo.picture)) { BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new System.Uri(activityInfo.picture); image.DecodePixelWidth = 800; image.EndInit(); image.Freeze(); tempInfoModel.ActivityThemePicture = image; } tempInfoModel.ActivityAddress = activityInfo.address; tempInfoModel.CreatedActivityDate = activityInfo.createTime; if (!string.IsNullOrEmpty(activityInfo.startTime)) { tempInfoModel.ActivityDate = Convert.ToDateTime(activityInfo.startTime).ToString("yyyy-MM-dd HH:mm"); } } //tempInfoModel.UserHeadUrl= _activityInfoList.Add(tempInfoModel); } } if (datas != null) { _isFirst = datas.isFirstPage; _isLast = datas.isLastPage; } }); }
/// <summary> /// Little utility to make it easier to do work outside of the UI thread /// </summary> public void Async(AsyncHandler handler) { var t = new Thread(new ThreadStart(handler)); t.Start(); }
/// <summary> /// Instantiates the AsyncTask class /// </summary> /// <param name="task">The task function to execute asynchrony. (A function with the signature "T_RETURN_VALUE FunctionName<T_RETURN_VALUE>()")</param> /// <param name="finished">The finished callback function. (A function with the signature "void FunctionName<T_RETURN_VALUE>(T_RETURN_VALUE result, Exception ex)")</param> /// <param name="progressChanged">The progress change callback function. (A function with the signature "void FunctionName(int percentage)")</param> /// <param name="supportCancellation">Flag to determine if cancellation is needed.</param> public AsyncTask(AsyncHandler <T_RETURN_VALUE> task, AsyncResultHandler <T_RETURN_VALUE> finished, AsyncProgressChangedHandler progressChanged = null, bool supportCancellation = false) { SetCallbackFunctions(task, finished, progressChanged, supportCancellation); }
protected DuplexSessionBase () { async_method = new AsyncHandler (CloseOutputSession); Id = new UniqueId ().ToString (); }
public ActivityDetailsViewModel(int activityId, string groupId) { _activityId = activityId; _groupId = groupId; var errCode = 0; var errMsg = string.Empty; DateTime serverDateTime = DateTime.Now; AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { AntSdkGetGroupActivityDetailsInput input = new AntSdkGetGroupActivityDetailsInput { userId = AntSdkService.AntSdkCurrentUserInfo.userId, activityId = activityId, groupId = groupId }; AntSdkQuerySystemDateOuput serverResult = AntSdkService.AntSdkGetCurrentSysTime(ref errCode, ref errMsg); if (serverResult != null) { serverDateTime = PublicTalkMothed.ConvertStringToDateTime(serverResult.systemCurrentTime); } var output = AntSdkService.GetActivityInfo(input, ref errCode, ref errMsg); return(output); }, (ex, datas) => { if (datas != null) { ActivityTitle = datas.theme; if (!string.IsNullOrEmpty(datas.picture)) { try { BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new System.Uri(datas.picture); image.DecodePixelWidth = 800; image.EndInit(); ActivityThemePic = image; } catch (Exception e) { LogHelper.WriteError("[ActivityDetailsViewModel_ImageOnLoad]:" + e.Message + e.StackTrace + e.Source); } } ActivityAddress = datas.address; ActivityIntroduce = datas.description; latitude = datas.latitude; longitude = datas.longitude; Console.Out.WriteLine(""); var startTime = DateTime.Now; var endTime = DateTime.Now.AddMinutes(30); if (!string.IsNullOrEmpty(datas.startTime) && !string.IsNullOrEmpty(datas.endTime)) { startTime = Convert.ToDateTime(datas.startTime); endTime = Convert.ToDateTime(datas.endTime); TimeSpan timeSpan = endTime - startTime; if (endTime.Year - startTime.Year == 0 && endTime.Day - startTime.Day == 0) { ActivityDateTime = startTime.ToString("yyyy-MM-dd HH:mm") + "-" + endTime.ToString("HH:mm"); } else { ActivityDateTime = startTime.ToString("yyyy-MM-dd HH:mm") + " " + endTime.ToString("yyyy-MM-dd HH:mm"); } } else { ActivityDateTime = startTime.ToString("yyyy-MM-dd HH:mm") + "-" + endTime.ToString("HH:mm"); } ParticipatorsCount = datas.voteCount ?? 0; if (datas.activityStatus == 1) { if (!datas.voteFlag) { if (DateTime.Compare(startTime, serverDateTime) <= 0) { ActivityStateContent = "已开始"; IsParticipatedActivity = false; } else { ActivityStateContent = "报名参加"; IsParticipatedActivity = true; } } else { ActivityStateContent = "已报名"; IsParticipatedActivity = false; } } else { ActivityStateContent = "已结束"; IsParticipatedActivity = false; } LoadActivityParticipators(); } }); }
/// <summary> /// 查询(暂时支持汉字和首字母查询) /// </summary> /// <param name="condition"></param> public void ResetQueryCondition(string condition) { AsyncHandler.AsyncCall(Application.Current.Dispatcher, () => { if (string.IsNullOrWhiteSpace(condition)) { return; } if (QueryContactList == null) { QueryContactList = new ObservableCollection <ContactInfoViewModel>(); } QueryContactList.Clear(); try { if (AntSdkService.AntSdkListContactsEntity.users != null) { //var userList = // AntSdkService.AntSdkListContactsEntity.contacts.users.Where( // m => IsconditionsSatisfy(m.userName, m.userNum)); //foreach (AntSdkContact_User user in userList) //{ // ContactInfoViewModel contactInfoViewModel = new ContactInfoViewModel(user, Container, condition); // contactInfoViewModel.MouseEnter = new DefaultCommand(mouseEnter); // contactInfoViewModel.MouseLeave = new DefaultCommand(mouseEnter); // contactInfoViewModel.PlaceholderWidth = 20; // QueryContactList.Add(contactInfoViewModel); //} var tempUsers = AntSdkService.AntSdkListContactsEntity.users.Where(m => m.status == 2); var i = 0; foreach (var user in tempUsers) { string pinYin = string.Empty; if (IsconditionsSatisfy(user.userName, user.userNum, ref pinYin)) { i++; ContactInfoViewModel contactInfoViewModel = new ContactInfoViewModel(user, Container, condition, pinYin); contactInfoViewModel.MouseEnter = new DefaultCommand(mouseEnter); contactInfoViewModel.MouseLeave = new DefaultCommand(mouseEnter); contactInfoViewModel.PlaceholderWidth = 20; QueryContactList.Add(contactInfoViewModel); if (i > 80) { break; } } } } if (_groupListViewModel != null) { //var groupList = // _groupListViewModel.GroupInfoList.Where(c => IsconditionsSatisfy(c.GroupInfo.groupName, string.Empty)); //foreach (GroupInfoViewModel group in groupList) //{ // ContactInfoViewModel contactInfoViewModel = new ContactInfoViewModel(group, Container, condition) // { // MouseEnter = new DefaultCommand(mouseEnter), // MouseLeave = new DefaultCommand(mouseEnter) // }; // QueryContactList.Add(contactInfoViewModel); //} foreach (var group in _groupListViewModel.GroupInfoList) { string pinYin = string.Empty; if (IsconditionsSatisfy(group.GroupName, string.Empty, ref pinYin)) { ContactInfoViewModel contactInfoViewModel = new ContactInfoViewModel(group, Container, condition, pinYin) { MouseEnter = new DefaultCommand(mouseEnter), MouseLeave = new DefaultCommand(mouseEnter) }; QueryContactList.Add(contactInfoViewModel); } } } //RaisePropertyChanged(() => QueryContactList); } catch (Exception e) { return; } if (QueryContactList.Count == 0) { BackImage = Visibility.Visible; } else { SelectContactItem = QueryContactList[0]; BackImage = Visibility.Collapsed; } }, DispatcherPriority.Background); }
/// <summary> /// 加载历史登录用户 /// </summary> public void LoadHistoryUsers() { AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { var task = SDKClient.SDKClient.Instance.GetAccountListDESC(); // var task = await SDKClient.SDKClient.Instance.GetAccountListDESC(); //var task = await SDKClient.SDKClient.Instance.GetAccountListDESC(); if (task == null || task.Result.Count == 0) { //this.SetStackPanelVisibility?.Invoke(); return(null); } return(task.Result); }, (ex, data) => { if (data == null || data.Count == 0) { IsQuickLogin = false; ChangeLoginAccount(null); return; } var tempData = data.Where(m => !string.IsNullOrEmpty(m.token)).OrderByDescending(m => m.lastlastLoginTime).ToList(); if (tempData.Count > 0) { historyAccountDB = tempData[0]; if (historyAccountDB.FirstLoginTime != null && DateTime.Now.Day - historyAccountDB.FirstLoginTime.Value.Day <= 7) { IsQuickLogin = true; } else { IsQuickLogin = false; ChangeLoginAccount(null); return; } } else { IsQuickLogin = false; ChangeLoginAccount(null); return; } IsQuickLogin = true; //foreach (var item in data) //{ UserModel user = new UserModel(); user.PhoneNumber = historyAccountDB.loginId; user.HeadImg = IMClient.Helper.ImageHelper.GetAccountFace(historyAccountDB.headPic, (s) => App.Current.Dispatcher.Invoke(() => user.HeadImg = s)); user.HeadImgMD5 = historyAccountDB.headPic; user.DisplayName = historyAccountDB.userName; LoginUser login = new LoginUser(user); if (historyAccountDB.loginModel != SDKClient.Model.LoginMode.None) { if (historyAccountDB.lastlastLoginTime.HasValue) { var interval = DateTime.Now - historyAccountDB.lastlastLoginTime.Value; if (interval.TotalDays < 30) { login.IsSavePassword = !string.IsNullOrEmpty(historyAccountDB.password) && !string.IsNullOrEmpty(historyAccountDB.loginId); login.Password = historyAccountDB.password; } else { login.IsSavePassword = false; login.Password = string.Empty; App.Current.Dispatcher.BeginInvoke(new Action(() => { this.HistoryUsers.Remove(login); })); } } else { } } App.Current.Dispatcher.BeginInvoke(new Action(() => { this.HistoryUsers.Add(login); if (this.SelectedLogin == null) { this.SetStackPanelVisibility?.Invoke(); this.SelectedLogin = this.HistoryUsers.FirstOrDefault(); } })); //} }); }
private static void OnIsOfflineChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { AsyncHandler.AsyncCall(Application.Current.Dispatcher, () => { var currentImage = d as ImageBrush; //Image currentImage=d as Image; if (currentImage == null) { return; } var value = d.GetValue(IsOfflineProperty); var isGray8 = value != null && (bool)value; if (isGray8) { var bitmapSource = currentImage.ImageSource as BitmapSource; if (bitmapSource == null) { return; } var url = currentImage.ImageSource.ToString(); if (url == GlobalVariable.DefaultImage.UserHeadDefaultImage) { var tempBitampSource = bitmapSource.ToGrayBitmap(); currentImage.ImageSource = tempBitampSource; } else { try { if (bitmapSource.IsDownloading) { bitmapSource.DownloadCompleted += (sender, args) => { var backupBitmapSource = bitmapSource.CloneCurrentValue(); currentImage.SetValue(BitmapSourceBackupProperty, backupBitmapSource); currentImage.ImageSource = bitmapSource.ToGrayBitmap(); }; } else { var backupBitmapSource = bitmapSource.CloneCurrentValue(); currentImage.SetValue(BitmapSourceBackupProperty, backupBitmapSource); var tempBitampSource = bitmapSource.ToGrayBitmap(); currentImage.ImageSource = tempBitampSource; } } catch (Exception ex) { } } //// 建立Gray32Float的BitmapSource //FormatConvertedBitmap newFormatedBitmapSource = new FormatConvertedBitmap(); //newFormatedBitmapSource.BeginInit(); //newFormatedBitmapSource.Source = currentImage.ImageSource as BitmapSource; //newFormatedBitmapSource.DestinationFormat = PixelFormats.Gray32Float; ////List<Color> colors = new List<Color>(); ////colors.Add(Colors.White); ////colors.Add(Colors.DarkGoldenrod); ////BitmapPalette palette = new BitmapPalette(colors); ////newFormatedBitmapSource.DestinationPalette = palette; //newFormatedBitmapSource.EndInit(); // 替换ImageSource } else { // 图像恢复操作 object obj = currentImage.GetValue(BitmapSourceBackupProperty); BitmapSource bs = obj as BitmapSource; if (bs == null) { return; } currentImage.ImageSource = bs; } }, DispatcherPriority.Background); }
/// <summary> /// 展开子节点 /// </summary> /// <param name="stackPanel">父面板</param> /// <param name="parentDepartId">父部门ID</param> /// <param name="level">在第几层</param> private void RecursionLoadSource(StackPanel stackPanel, string parentDepartId, int level) { if (AntSdkService.AntSdkListContactsEntity == null) { return; } AsyncHandler.AsyncCall(Application.Current.Dispatcher, () => { if (AntSdkService.AntSdkListContactsEntity.departs != null) { List <AntSdkContact_Depart> departList = AntSdkService.AntSdkListContactsEntity.departs.Where(c => c.parentDepartId == parentDepartId) .ToList(); if (AntSdkService.AntSdkListContactsEntity.users != null) { if (stackPanel == null) { stackPanel = new StackPanel(); } List <AntSdkContact_User> userList = AntSdkService.AntSdkListContactsEntity.users.Where(c => c.departmentId == parentDepartId && c.status == 2) .OrderBy(c => c.userId) .ToList(); if (userList.Count > 0) { stackPanel?.Children.Clear(); foreach (AntSdkContact_User user in userList) { ContactInfoView contactInfo = new ContactInfoView(user, this.Container); ContactInfoViewModel contactInfoViewModel = contactInfo.DataContext as ContactInfoViewModel; var tempContactInfo = ContactInfoViewModelList.FirstOrDefault(m => m.User.userId == user.userId); //if (tempContactInfo?.User != null && tempContactInfo.User.departmentId == user.departmentId) continue; if (tempContactInfo?.User != null && tempContactInfo.User.departmentId != user.departmentId) { tempContactInfo.User = user; } stackPanel.Children.Add(contactInfo); if (Container == GlobalVariable.ContactInfoViewContainer.ContactListView) { contactInfo.MouseDown += ModifyColorOnMouseClick; } else if (Container == GlobalVariable.ContactInfoViewContainer.GroupEditWindowViewLeft) { GroupEditWindowViewModel groupEditVM = Owner as GroupEditWindowViewModel; if (groupEditVM?.GroupMemberList != null && groupEditVM.GroupMemberList.Select(c => c.User.userId).Contains(user.userId)) { if (groupEditVM.OriginalMemberIds != null && groupEditVM.OriginalMemberIds.Contains(user.userId)) { contactInfoViewModel?.SetExistGroupMember(); } else { contactInfoViewModel?.OnStateImageClickEventEvent(contactInfoViewModel, true); } } } else if (Container == GlobalVariable.ContactInfoViewContainer.MultiContactsSelectLeft) { MultiContactsSelectViewModel vm = Owner as MultiContactsSelectViewModel; if (vm != null && vm.GroupMemberList != null && vm.GroupMemberList.Select(c => c.User.userId).Contains(user.userId)) { //if (vm.OriginalMemberIds != null && vm.OriginalMemberIds.Contains(user.userId)) //{ // contactInfoViewModel.SetExistGroupMember(); //} //else //{ contactInfoViewModel?.OnStateImageClickEventEvent(contactInfoViewModel, true); //} } } if (contactInfoViewModel != null) { contactInfoViewModel.PlaceholderWidth = 30; ContactInfoViewModelList.Add(contactInfoViewModel); } } } else if (stackPanel?.Children.Count > 0) { stackPanel?.Children.Clear(); } } if (departList.Count <= 0) { return; } foreach (AntSdkContact_Depart depart in departList) { AdddepartData(depart, stackPanel, level); } } }); }
/// <summary> /// 部门改变 /// </summary> /// <param name="departs">部门</param> public void DepartmentUpdate(AntSdkAddListContactsOutput_Departs departs) { AsyncHandler.AsyncCall(Application.Current.Dispatcher, () => { if (departs.add?.Count > 0) { //如果有一级部门,先添加一级部门 var firstLevelDeparts = departs.add.Where(m => m.parentDepartId == "0"); foreach (var firstLevelDepart in firstLevelDeparts) { if (dicExpanderNode == null || dicExpanderNode.Count <= 0) { AddFirstLevelDepartSource(firstLevelDepart); } else { var departemntExpander = dicExpanderNode.Keys.FirstOrDefault( m => m.Tag != null && m.Tag.ToString() == firstLevelDepart.departmentId); if (departemntExpander == null) { AddFirstLevelDepartSource(firstLevelDepart); } } } //添加二级部 var tempDeparts = departs.add.Where(m => m.parentDepartId != "0"); foreach (var depart in tempDeparts) { if (dicExpanderNode == null || dicExpanderNode.Count <= 0) { return; } if (dicExpanderNode.Keys.Count == 0) { return; } var departemntExpander = dicExpanderNode.Keys.FirstOrDefault( m => m.Tag != null && m.Tag.ToString() == depart.parentDepartId); if (departemntExpander == null) { return; } var departemntStackPanel = departemntExpander.Content as StackPanel; var node = dicExpanderNode[departemntExpander]; if (node.IsLoaded) { var tempDepartemntExpander = dicExpanderNode.Keys.FirstOrDefault( m => m.Tag != null && m.Tag.ToString() == depart.departmentId); if (tempDepartemntExpander == null) { AdddepartData(depart, departemntStackPanel, node.Level); } } } } if (departs.delete?.Count > 0) { if (dicExpanderNode != null && dicExpanderNode.Count > 0) { var tempDeparts = departs.delete; foreach (var depart in tempDeparts) { var departemntExpander = dicExpanderNode.Keys.FirstOrDefault( m => m.Tag != null && m.Tag.ToString() == depart.departmentId); if (departemntExpander == null) { continue; } var departemntStackPanel = departemntExpander.Content as StackPanel; var node = dicExpanderNode[departemntExpander]; if (string.IsNullOrEmpty(node.ParentDepartId)) { MainStackPanel.Children.Remove(departemntExpander); dicExpanderNode.Remove(departemntExpander); } else { var parentDepartemntExpander = dicExpanderNode.Keys.FirstOrDefault( m => m.Tag != null && m.Tag.ToString() == node.ParentDepartId); var parentDepartemntStackPanel = parentDepartemntExpander?.Content as StackPanel; if (parentDepartemntStackPanel == null) { continue; } parentDepartemntStackPanel.Children.Remove(departemntExpander); dicExpanderNode.Remove(departemntExpander); } } //var tempFirstLevelDeparts = departs.delete.Where(m => m.departmentId == "0"); //foreach (var depart in tempFirstLevelDeparts) //{ // var departemntExpander = // dicExpanderNode.Keys.FirstOrDefault( // m => m.Tag != null && m.Tag.ToString() == depart.departmentId); // if (departemntExpander == null) continue; // var departemntStackPanel = departemntExpander.Content as StackPanel; // var node = dicExpanderNode[departemntExpander]; // if (node.IsLoaded) // { // departemntStackPanel?.Children.Clear(); // } //} } } if (!(departs.update?.Count > 0)) { return; } { foreach (var depart in departs.update) { var newDepartemntExpander = dicExpanderNode?.Keys.FirstOrDefault( m => m.Tag != null && (string)m.Tag == depart.departmentId); if (newDepartemntExpander != null) { //var node = dicExpanderNode[newDepartemntExpander]; var departInfo = AntSdkService.AntSdkListContactsEntity.departs.FirstOrDefault( m => m.departmentId == depart.departmentId); var count = GetContactsCount(depart.departmentId); if (departInfo != null) { newDepartemntExpander.Header = departInfo.departName + "(" + count + ")"; } } } } }); }
/// <summary> /// 加载活动参与者 /// </summary> private void LoadActivityParticipators() { AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { var errCode = 0; var errMsg = string.Empty; AntSdkGetGroupActivityParticipatorInput participatorInput = new AntSdkGetGroupActivityParticipatorInput { groupId = _groupId, activityId = _activityId, pageNum = pageNum, pageSize = pageSize }; try { return(AntSdkService.GetGroupActivityParticipators(participatorInput, ref errCode, ref errMsg)); } catch (Exception ex) { LogHelper.WriteError("活动参与者接口异常:" + ex.Message + ex.Source + ex.StackTrace); return(null); } }, (ex, datas) => { if (datas == null) { return; } if (datas.list.Count > 0) { ActivityParticipators.Clear(); foreach (var participatorInfo in datas.list) { AntSdkContact_User contactUser = AntSdkService.AntSdkListContactsEntity.users.Find( c => c.userId == participatorInfo.userId); var activityParticipatorInfo = new ActivityParticipator(); if (contactUser != null) { activityParticipatorInfo.ParticipatorId = contactUser.userId; activityParticipatorInfo.ParticipatorName = contactUser.userNum + contactUser.userName; if (!string.IsNullOrWhiteSpace(contactUser.picture) && publicMethod.IsUrlRegex(contactUser.picture)) { var userImage = GlobalVariable.ContactHeadImage.UserHeadImages.FirstOrDefault( m => m.UserID == contactUser.userId); activityParticipatorInfo.ParticipatorHeadPic = string.IsNullOrEmpty(userImage?.Url) ? contactUser.picture : userImage.Url; } else { activityParticipatorInfo.ParticipatorHeadPic = GlobalVariable.DefaultImage.UserHeadDefaultImage; } } else { activityParticipatorInfo.ParticipatorId = participatorInfo.userId; activityParticipatorInfo.ParticipatorHeadPic = !string.IsNullOrEmpty(participatorInfo.picture) ? participatorInfo.picture : GlobalVariable.DefaultImage.UserHeadDefaultImage; activityParticipatorInfo.ParticipatorName = participatorInfo.userNum + participatorInfo.userName; } ActivityParticipators.Add(activityParticipatorInfo); } ParticipatorsCount = ActivityParticipators.Count; } }); }
private void SetImage(string imgPath, bool isImgExceed = false) { bool isCreate; ImageScanWindow scan = CreateOrActiveWindow(out isCreate); scan.Show(); //Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, new Action(() => //{ if (_currentPath != imgPath) { this.img.Dispose(); AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { try { scan.Dispatcher.Invoke(new Action(() => { scan.loading.Visibility = Visibility.Visible; })); //this.img.Visibility = Visibility.Collapsed; //this.tbInfo.Text = "图片加载中..."; //BitmapImage img = new BitmapImage(new Uri(imgPath, UriKind.RelativeOrAbsolute)); if (isImgExceed) { App.Current.Dispatcher.Invoke(() => { this.img.Visibility = Visibility.Visible; scan.loading.Visibility = Visibility.Collapsed; BitmapImage img = new BitmapImage(); img.BeginInit(); img.CacheOption = BitmapCacheOption.OnLoad; img.UriSource = new Uri(IMAssets.ImageDeal.ImgLoadFail); img.EndInit(); img.Freeze(); this.tbInfo.Text = "图片已过期!"; this.img.Source = img; //SetProperty(imgPath, scan, img, false); SetState(true); }); return(null); } else { var bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.StreamSource = new MemoryStream(File.ReadAllBytes(imgPath)); //bitmap.StreamSource = new MemoryStream(ImageHelper.ImageToBytes(path)); bitmap.EndInit(); bitmap.Freeze(); return(bitmap); } } catch { try { BitmapImage img = new BitmapImage(); img.BeginInit(); img.CacheOption = BitmapCacheOption.OnLoad; if (imgPath == IMAssets.ImageDeal.DefaultHeadImage) { img.UriSource = new Uri(imgPath); } else { img.StreamSource = new MemoryStream(ImageHelper.ImageToBytes(imgPath)); } img.EndInit(); img.Freeze(); return(img); } catch { App.Current.Dispatcher.Invoke(() => { this.img.Visibility = Visibility.Collapsed; scan.loading.Visibility = Visibility.Collapsed; IMClient.Helper.MessageHelper.LoadImgContent(_target); _currentPath = imgPath; this.Title = this.tbName.Text = System.IO.Path.GetFileName(imgPath); this.tbInfo.Text = "加载失败!"; SetState(true); }); return(null); } } }, (ex, data) => { if (data == null) { return; } scan.Dispatcher.Invoke(new Action(() => { loading.Visibility = Visibility.Collapsed; })); SetProperty(imgPath, scan, data, false); _currentPath = imgPath; this.Title = this.tbName.Text = System.IO.Path.GetFileName(imgPath); //Task.Delay(30).ContinueWith(task => //{ // scan.Dispatcher.Invoke(new Action(() => // { if (scan.WindowState == WindowState.Minimized) { scan.WindowState = WindowState.Normal; } SetState(true); scan.Activate(); //})); //}); //})); }); } else { SetState(true); } }
/// <summary> /// 分页查询投票数据 /// </summary> private void LoadVotesData() { DateTime serverDateTime = DateTime.Now; AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { var errCode = 0; var errMsg = string.Empty; AntSdkQuerySystemDateOuput serverResult = AntSdkService.AntSdkGetCurrentSysTime(ref errCode, ref errMsg); if (serverResult != null) { serverDateTime = PublicTalkMothed.ConvertStringToDateTime(serverResult.systemCurrentTime); } var voteList = AntSdkService.GetGroupVotes(_groupId, ref errCode, ref errMsg, _page, _size, AntSdkService.AntSdkCurrentUserInfo.userId); return(voteList); }, (ex, datas) => { VoteInfoList.Clear(); if (datas?.content != null && datas.content.Count > 0) { foreach (var voteInfo in datas.content) { var tempInfoModel = new VoteInfoModel(); tempInfoModel.IsHaveVoted = voteInfo.voted; if (voteInfo.createdBy == AntSdkService.AntSdkCurrentUserInfo.userId) { tempInfoModel.IsbtnDeleteVisibility = true; } tempInfoModel.VoteId = voteInfo.id; tempInfoModel.VoteSate = DateTime.Compare(Convert.ToDateTime(voteInfo.expiryTime), serverDateTime) < 0; tempInfoModel.VoteTitle = voteInfo.title + (voteInfo.secret ? "(匿名)" : ""); tempInfoModel.UserID = voteInfo.createdBy; AntSdkContact_User user = AntSdkService.AntSdkListContactsEntity.users.Find(c => c.userId == voteInfo.createdBy); if (user != null) { tempInfoModel.Explain = user.userNum + user.userName + " 编辑于 " + DataConverter.FormatTimeByCreateTime(voteInfo.createdDate); if (!string.IsNullOrWhiteSpace(user.picture) && publicMethod.IsUrlRegex(user.picture)) { var userImage = GlobalVariable.ContactHeadImage.UserHeadImages.FirstOrDefault( m => m.UserID == user.userId); tempInfoModel.UserHeadUrl = string.IsNullOrEmpty(userImage?.Url) ? user.picture : userImage.Url; } else { tempInfoModel.UserHeadUrl = GlobalVariable.DefaultImage.UserHeadDefaultImage; } } //tempInfoModel.UserHeadUrl= _voteInfoList.Add(tempInfoModel); } } if (datas != null) { _isFirst = datas.first; _isLast = datas.last; } }); }
/// <summary> /// This function calls the passed task function asynchronously. /// </summary> /// <param name="task">The task function to execute asynchrony. (A function with the signature "T_RETURN_VALUE FunctionName<T_RETURN_VALUE>()")</param> /// <param name="finished">The finished callback function. (A function with the signature "void FunctionName<T_RETURN_VALUE>(T_RETURN_VALUE result, Exception ex)")</param> /// <param name="progressChanged">The progress change callback function. (A function with the signature "void FunctionName(int percentage)")</param> public static void DoWork(AsyncHandler <T_RETURN_VALUE> task, AsyncResultHandler <T_RETURN_VALUE> finished = null, AsyncProgressChangedHandler progressChanged = null) { AsyncTask <T_RETURN_VALUE> asyncTask = new AsyncTask <T_RETURN_VALUE>(task, finished, progressChanged); asyncTask.Run(); }
public ActivityListViewModel(bool isAdminId, string groupId) { _isAdminId = isAdminId; if (!_isAdminId) { IsShowBtnAddActivity = false; } _groupId = groupId; _activityInfoList = new ObservableCollection <ActivityInfoModel>(); var errCode = 0; var errMsg = string.Empty; AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { AntSdkGetGroupActivitysInput intput = new AntSdkGetGroupActivitysInput { groupId = _groupId, activityStatus = 0, pageNum = _page, pageSize = _size, userId = AntSdkService.AntSdkCurrentUserInfo.userId }; var activityList = AntSdkService.GetGroupActivitys(intput, ref errCode, ref errMsg); return(activityList); }, (ex, datas) => { if (datas?.list != null && datas.list.Count > 0) { foreach (var activityInfo in datas.list) { var tempInfoModel = new ActivityInfoModel(); tempInfoModel.IsHaveActivity = activityInfo.voteFlag; if (activityInfo.userId == AntSdkService.AntSdkCurrentUserInfo.userId) { tempInfoModel.IsbtnDeleteVisibility = true; } tempInfoModel.ActivityId = activityInfo.activityId; tempInfoModel.ActivitySate = activityInfo.activityStatus == 2; tempInfoModel.ActivityTitle = activityInfo.theme; //AntSdkContact_User user = AntSdkService.AntSdkListContactsEntity.users.Find(c => c.userId == activityInfo.userId); if (!string.IsNullOrEmpty(activityInfo.picture)) { var index = activityInfo.picture.LastIndexOf("/", StringComparison.Ordinal) + 1; var fileNameIndex = activityInfo.picture.LastIndexOf(".", StringComparison.Ordinal); var fileName = activityInfo.picture.Substring(index, fileNameIndex - index); string strUrl = activityInfo.picture.Replace(fileName, fileName + "_80x80"); try { BitmapImage image = new BitmapImage(); image.BeginInit(); image.UriSource = new System.Uri(strUrl); image.DecodePixelWidth = 800; image.EndInit(); //image.Freeze(); tempInfoModel.ActivityThemePicture = image; } catch (Exception e) { LogHelper.WriteError("[ActivityListViewModel_ImageOnLoad]:" + e.Message + e.StackTrace + e.Source); } } tempInfoModel.ActivityAddress = activityInfo.address; tempInfoModel.CreatedActivityDate = activityInfo.createTime; if (!string.IsNullOrEmpty(activityInfo.startTime)) { tempInfoModel.ActivityDate = Convert.ToDateTime(activityInfo.startTime).ToString("yyyy-MM-dd HH:mm"); } _activityInfoList.Add(tempInfoModel); } _isFirst = datas.isFirstPage; _isLast = datas.isLastPage; IsPaging = !_isLast; } else { IsActivityData = true; IsPaging = false; } }); }
/// <summary> /// Begins processing the image request. /// </summary> /// <param name="context">Current HTTP request context</param> /// <param name="cb">Delegate called when processing is completed</param> /// <param name="extraData">Application defined state</param> /// <returns><see cref="T:System.IAsyncResult"/> used for tracking progress</returns> IAsyncResult IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) { AsyncHandler handler = new AsyncHandler(context, cb, extraData); handler.StartAsyncWork(); return handler; }
/// <summary> /// 获取服务器考勤记录 /// </summary> public void GetServicePunchClocksData(bool isNewRecord = false) { if (isNewRecord) { _isLast = false; } if (_isLast) { return; } AsyncHandler.CallFuncWithUI(System.Windows.Application.Current.Dispatcher, () => { if (isNewRecord) { timer?.Stop(); timer = null; _page = 0; todayAttendanceRecords = null; } _page++; var errorCode = 0; var errorMsg = string.Empty; var punchClocksOutput = AntSdkService.GetPunchClocks(AntSdkService.AntSdkLoginOutput.userId, _page, _size, ref errorCode, ref errorMsg); return(punchClocksOutput); }, (ex, datas) => { if (isNewRecord) { AttendanceRecords.Clear(); } if (datas != null && datas.list.Count > 0) { var serverDateTime = PublicTalkMothed.ConvertStringToDateTime(datas.systemTime); var punchClocksOutputList = datas.list.OrderByDescending(m => m.attendId); foreach (var punchClocks in datas.list) { var exitAttendanceRecord = AttendanceRecords.FirstOrDefault(m => m.AttendId == punchClocks.attendId); if (exitAttendanceRecord != null) { continue; } var attendanceRecord = new AttendanceRecord(); attendanceRecord.AttendId = punchClocks.attendId; attendanceRecord.VerifyState = punchClocks.status; attendanceRecord.PuncherTimeStamp = punchClocks.attendTime; if (attendanceRecord.VerifyState == 0) { attendanceRecord.IsbtnVerify = true; attendanceRecord.VerifyDescribe = "待验证"; } else if (attendanceRecord.VerifyState == 1) { attendanceRecord.VerifyDescribe = "验证过期"; } else if (attendanceRecord.VerifyState == 2) { attendanceRecord.VerifyDescribe = "打卡成功"; } var diffMinute = serverDateTime - PublicTalkMothed.ConvertStringToDateTime(punchClocks.attendTime); if ((diffMinute.Days > 0 || diffMinute.TotalMinutes > 20) && attendanceRecord.VerifyState == 0) { attendanceRecord.IsbtnVerify = false; attendanceRecord.VerifyDescribe = "验证过期"; attendanceRecord.VerifyState = 1; } if (!string.IsNullOrEmpty(punchClocks.attendTime)) { attendanceRecord.PuncherDateTime = PublicTalkMothed.ConvertStringToDateTime(punchClocks.attendTime); } else { attendanceRecord.PuncherDateTime = DateTime.Now; } attendanceRecord.PuncherAddress = punchClocks.address; if (attendanceRecord.PuncherDateTime.Year - DateTime.Now.Year > 0) { attendanceRecord.PuncherDate = attendanceRecord.PuncherDateTime.ToString("yyyy年MM月dd日"); } else { attendanceRecord.PuncherDate = attendanceRecord.PuncherDateTime.ToString("MM月dd日"); } attendanceRecord.PuncherTime = attendanceRecord.PuncherDateTime.ToString("HH:mm"); AttendanceRecords.Insert(0, attendanceRecord); } _isFirst = datas.isFirstPage; _isLast = datas.isLastPage; var tempAttendanceRecord = AttendanceRecords.FirstOrDefault(m => m.IsbtnVerify); if (tempAttendanceRecord != null) { LoadData(tempAttendanceRecord); } } else { } }); }