System.InvalidOperationException:“调用线程必须为 STA,因为许多 UI 组件都需要。” 这个异常通常发生在尝试在非单线程单元(STA,Single-Threaded Apartment)线程中访问某些 UI 组件时。在 .NET 中,许多 UI 框架(如 Windows Forms 和 WPF)要求与其交互的线程必须是 STA 线程。这是因为这些 UI 框架不是线程安全的...
}); 后台代码不能直接操作UI控件,需要控制,就要通过这个Dispatcher。 类库程序不需要使用Dispatcher,而是页面需要程序的时候使用Dispatcher 方式一: Application.Current.Dispatcher.Invoke((Action)(() => { code })); 方式二: Action action1 = () => { }; documentList[friendId].Dispatcher.BeginInvoke(action...
WPF中,代码中准备控制控件内容时,有时会报错:“ 调用线程必须为 STA,因为许多 UI 组件都需要 ”。 如在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一些特别的处理。WPF中也一样。 首先,WPF中,当报上面那个错误时,代码可以改成类似以下: void authOK(AuthorizationResult auth) ...
通常,如果编写测试很困难,这表明代码应该设计得更好。
STA 模型意味着可以在任何线程上创建窗口,但窗口一旦创建后就不能切换线程,并且对它的所有函数调用都...
调用线程必须为STA,因为许多UI组件都需要。 Thread NetServer = new Thread(new ThreadStart(NetServerThreadFunc)); NetServer.Start(); WPF工程里,此线程不可以操作UI元素,如果在线程中调用了UI处理,则会弹出如上错误。避免方法如下: 1、public delegate void DeleFunc();...
WPF中,代码中准备控制控件内容时,有时会报错:“ 调用线程必须为 STA,因为许多 UI 组件都需要 ”。 如在winform下面,使用多线程时,控件的值读取是可以的,但如果要更改,那么就必须进行一些特别的处理。WPF中也一样。 首先,WPF中,当报上面那个错误时,代码可以改成类似以下: ...
1、public delegate void DeleFunc(); public void Func() { //使用ui元素 } 线程函数中做如此调用: System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new DeleFunc(Func)); 即可。 2、 Thread NetServer = new Thread(new ThreadStart(NetServerThreadFunc...
WPF Dispatcher.BeginInvoke子线程更新UI 2019-12-23 16:30 − 在开发WPF应用时出现:”调用线程无法访问此对象,因为另一个线程拥有该对象。“是因为UI线程是WPF应用的主线程,若尝试子线程更新UI线程应使用Dispatcher.BeginInvoke()或者Invoke()方法。 Dispatcher.BeginInvoke() //... Stay627 6 1800 C# WPF...
现在编译时没问题的,运行到这里的时候就会出错:调用线程必须为 STA,因为许多 UI 组件都需要。 其实是这个Timer不是针对于有委托,线程的这种函数用的。 对于调会用其他线程的函数,我在主函数中使用了 DispatcherTimer DispatcherTimer timer =newDispatcherTimer(); ...