C# 创建新的调度程序
在我的Windows Phone 8.1应用程序中,我需要为C# 创建新的调度程序,c#,multithreading,windows-runtime,windows-phone-8.1,windows-phone,C#,Multithreading,Windows Runtime,Windows Phone 8.1,Windows Phone,在我的Windows Phone 8.1应用程序中,我需要为线程创建一个新的调度程序。通常,我们可以这样做: Dispatcher dispatcher = null; ManualResetEvent dispatcherReadyEvent = new ManualResetEvent(false); new Thread(new ThreadStart(() => { dispatcher = Dispatcher.CurrentDispatcher; dispa
线程创建一个新的调度程序。通常,我们可以这样做:
Dispatcher dispatcher = null;
ManualResetEvent dispatcherReadyEvent = new ManualResetEvent(false);
new Thread(new ThreadStart(() =>
{
dispatcher = Dispatcher.CurrentDispatcher;
dispatcherReadyEvent.Set();
Dispatcher.Run();
})).Start();
dispatcherReadyEvent.WaitOne();
dispatcher.Invoke(...);
问题是使用Windows Phone 8.1时,我无法访问线程
类。我不明白如何创建线程并从中提取调度程序。提前感谢。不,您无法在Windows运行时应用程序中获取工作线程调度程序。在.NET for Desktop中,有一个Dispatcher类,用于管理线程的工作项队列。但在Windows运行时中,只有UI线程具有名为CoreDispatcher的dispatcher
将工作项提交到后台线程池。您可以使用方法Windows.System.Threading.ThreadPool.RunAsync
要按顺序运行工作项,可以使用wait关键字
例如:
await RunTask1Async();
await RunTask1Async();
或者使用任务类
var task = new Task(()=> {
// work1
}).ContinueWith((t)=> {
// work2
});
在某一点上,我想停止并行,我想让调用按顺序进行(按照它们的顺序)。我想创建一种频道。为此,我需要一个名为ChannelThread的线程。如果我有该线程的调度程序,我可以调用该调度程序上的函数。所以,我会确保通话按顺序进行
首先,停止从线程的角度思考。在软件开发的这一点上,线程是一个实现细节。我建议采用最高级别的解决方案
立即想到的两个是反应式扩展(Rx)和TPL数据流。由于您的问题中没有太多上下文,很难说Rx与您的解决方案集成起来有多容易。TPL Dataflow提供了一个简单的FIFO缓冲区,您可以这样使用:
var fifo = new ActionBlock<Action>(action => action());
Dispatcher.CurrentDispatcher
对所有应用程序都是相同的是,但我不想要当前线程(可能是UI线程)的Dispatcher。我想创建另一个线程并使用它的调度程序。谢谢你帮助我。你能描述一下你想完成什么吗?Dispatcher
应该用来访问UI线程,通常只有一个UI线程。假设您有一些线程。每个线程调用整个系统中的一些函数。在某一点上,我想停止并行,我想让调用按顺序进行(按照它们的顺序)。我想创建一种频道。为此,我需要一个名为ChannelThread的线程。如果我有该线程的调度程序,我可以调用该调度程序上的函数。因此,我将确保调用按顺序进行。您可以使用C#中的事件模型来实现这一点,为什么在这里需要Dispatcher?
fifo.Post(() => { /* work */ });