您使用什么Python事件系统?我已经知道了pydispatcher,但我想知道还能找到什么,或者是常用的?
我对作为大型框架一部分的事件管理器不感兴趣,我宁愿使用一个我可以轻松扩展的小型简单解决方案.
我正在构建一个Windows应用商店应用,我有一些代码需要发布到UI线程.
为此,我想检索CoreDispatcher并使用它来发布代码.
似乎有几种方法可以这样做:
// First way
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher;
// Second way
Window.Current.Dispatcher;
Run Code Online (Sandbox Code Playgroud)
我想知道哪一个是正确的?或两者是否相同?
c# dispatcher async-await windows-runtime windows-store-apps
我正试着打电话System.Windows.Threading.Dispatcher.BeginInvoke.方法的签名是这样的:
BeginInvoke(Delegate method, params object[] args)
Run Code Online (Sandbox Code Playgroud)
我试图传递一个Lambda而不是创建一个Delegate.
_dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } );
Run Code Online (Sandbox Code Playgroud)
它给了我一个编译错误说我
无法将lambda转换为System.Delegate.
委托的签名将对象作为参数并返回void.我的lambda匹配这个,但它不起作用.我错过了什么?
Dispatcher.CurrentDispatcher(in System.Windows.Threading)和Application.Current.Dispatcher(in System.Windows)之间有什么区别?
我的直觉告诉我,Application.Current.Dispatcher永远不会改变,并且对当前应用程序中的所有线程都是全局的,同时Dispatcher.CurrentDispatcher可能会Dispatcher根据调用它的线程创建一个新实例.
那是对的吗?
如果是,Dispatcher.CurrentDispatcher主要用于多线程UI 的目的是什么?
我最近开始在WPF编程并遇到了以下问题.我不明白如何使用该Dispatcher.Invoke()方法.我有线程经验,我做了一些简单的Windows窗体程序,我只是使用了它
Control.CheckForIllegalCrossThreadCalls = false;
Run Code Online (Sandbox Code Playgroud)
是的我知道这很蹩脚,但这些都是简单的监控应用程序.
事实是,现在我想提出一个WPF应用程序在后台检索数据,我开始了一个新的线程进行调用来检索(从网络服务器)的数据,现在我要显示它在我的WPF形式.问题是,我不能从这个线程设置任何控制.甚至没有标签或任何东西.怎么解决这个问题?
回答评论:
@Jalfp:
所以当我得到数据时,我在'new tread'中使用这个Dispatcher方法?或者我应该让后台工作程序检索数据,将其放入一个字段并启动一个等待该字段填满的新线程并调用调度程序将检索到的数据显示到控件中?
我应该能够访问属于View 的Dispatcher,我需要将它传递给ViewModel.但是View应该对ViewModel一无所知,那么你如何传递它呢?引入一个接口或者不是将它传递给实例创建一个将由View编写的全局调度程序单例?您如何在MVVM应用程序和框架中解决这个问题?
编辑:请注意,因为我的ViewModel可能是在后台线程中创建的,所以我不能只Dispatcher.Current在ViewModel的构造函数中创建.
如何在WinRT(Windows 8 Metro)中的UI线程上运行代码?
该Invoke方法不存在.
Dispatcher当你没有引用任何UI元素时,有没有办法获得UI线程?
我无法让Dispatcher运行委托我在单元测试时传递给它.当我运行程序时,一切正常,但是,在单元测试期间,以下代码将无法运行:
this.Dispatcher.BeginInvoke(new ThreadStart(delegate
{
this.Users.Clear();
foreach (User user in e.Results)
{
this.Users.Add(user);
}
}), DispatcherPriority.Normal, null);
Run Code Online (Sandbox Code Playgroud)
我在我的viewmodel基类中有这个代码来获取Dispatcher:
if (Application.Current != null)
{
this.Dispatcher = Application.Current.Dispatcher;
}
else
{
this.Dispatcher = Dispatcher.CurrentDispatcher;
}
Run Code Online (Sandbox Code Playgroud)
我是否需要做一些事情来初始化Dispatcher进行单元测试?Dispatcher永远不会在委托中运行代码.
这些都不起作用:
_uiDispatcher.Invoke(() => { });
_uiDispatcher.Invoke(delegate() { });
Run Code Online (Sandbox Code Playgroud)
我想要做的就是在我的主UI线程上调用内联方法.所以我在主线程上调用了这个:
_uiDispatcher = Dispatcher.CurrentDispatcher;
Run Code Online (Sandbox Code Playgroud)
现在我想从另一个线程在该线程上执行一些代码.我该怎么做?我使用了错误的语法吗?
请注意,这不是 WPF应用程序; 我引用了WindowsBase所以我可以访问Dispatcher该类.
dispatcher ×10
wpf ×6
c# ×5
.net ×4
async-await ×1
begininvoke ×1
events ×1
lambda ×1
mvvm ×1
python ×1
unit-testing ×1
windows-8 ×1