调用线程必须为 STA,因为许多 UI 组件都需要。
调用线程必须为 STA,因为许多 UI 组件都需要。
1 2 3 4 5 6 7 8 | ThreadPool.QueueUserWorkItem( delegate { SynchronizationContext.SetSynchronizationContext( new DispatcherSynchronizationContext(System.Windows.Application.Current.Dispatcher)); SynchronizationContext.Current.Post(pl => { }, null ); }); |
后台代码不能直接操作UI控件,需要控制,就要通过这个Dispatcher。
类库程序不需要使用Dispatcher,而是页面需要程序的时候使用Dispatcher
方式一:
Application.Current.Dispatcher.Invoke((Action)(() => { code }));
方式二:
Action action1 = () => { };
documentList[friendId].Dispatcher.BeginInvoke(action1);
方式三:
1 2 3 4 | Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Loaded, new Action(() => { })); |
调用线程无法访问此对象,因为另一个线程拥有该对象。
出错原因:
多线程之间,主线程的控制等等是被保护的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Task p = new Task(state => { }, "我是父任务" ); p.ContinueWith(t => { //Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() => //{ // WindowLogin.Instance().Close(); // MainWindow.Instance().Show(); //})); }); p.Start(); |
后台异步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (o, e) => { List<GetConversationListResult> result = data.ToParse<List<GetConversationListResult>>(); foreach (V2TIMConversationInfo item in conversationList) { var vm = MainWindowViewModel.CreateInstance(); vm.conversationList.Add(item); } }; worker.RunWorkerCompleted += (o, e) => { }; worker.RunWorkerAsync(); |
该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改。
1 2 3 4 5 6 7 8 9 | ThreadPool.QueueUserWorkItem( delegate { SynchronizationContext.SetSynchronizationContext( new DispatcherSynchronizationContext(System.Windows.Application.Current.Dispatcher)); SynchronizationContext.Current.Post(pl => { //里面写业务内容 }, null ); }); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂