标签: dispatcher

"调用线程必须是STA,因为在线程中创建WPF弹出窗口时,许多UI组件都需要这个"错误

我有一个WPF应用程序,其中一个线程检查一些值.在某些情况下,我会显示一个弹出窗口Window以显示消息.当我在线程中创建此弹出窗口时,弹出窗口的构造函数抛出异常:

"调用线程必须是STA,因为许多UI组件都需要这个."

我该如何解决这个错误?

这是我创建弹出窗口的代码:

// using System.Threading;
// using System.Windows.Threading;
Thread Messagethread = new Thread(new ThreadStart(delegate()
{
    DispatcherOperation DispacherOP = 
        frmMassenger.Dispatcher.BeginInvoke(
            DispatcherPriority.Normal,
            new Action(delegate()
            {
                frmMassenger.Show();
            }));
}));
Messagethread.Start();
Run Code Online (Sandbox Code Playgroud)

.net wpf multithreading dispatcher

14
推荐指数
2
解决办法
5万
查看次数

Rails应用程序和Mongrel的奇怪问题

我最初在serverfault.com上发布了一个与此问题相关的问题:https://serverfault.com/questions/152587/apache-mod-proxy-to-another-server

我已经意识到这不是我的服务器设置问题,而是我的rails应用程序.我已经在服务器上设置了这个应用程序,就像我在同一台服务器上运行的另一个正常运行的rails应用程序一样.当我启动服务器时,我的mongrel.log看起来像这样:

** Daemonized, any open files are closed.  Look at /var/www/osuwebdev/tmp/pids/mongrel.pid and log/mongrel.log for info.
** Starting Mongrel listening at 0.0.0.0:8080
** Starting Rails with production environment...
** Rails loaded.
** Loading any Rails specific GemPlugins
** Signals ready.  TERM => stop.  USR2 => restart.  INT => stop (no restart).
** Rails signals registered.  HUP => reload (without restart).  It might not work well.
** Mongrel 1.1.5 available at 0.0.0.0:8080
** Writing PID file to /var/www/osuwebdev/tmp/pids/mongrel.pid …
Run Code Online (Sandbox Code Playgroud)

mongrel ruby-on-rails dispatcher

13
推荐指数
1
解决办法
3880
查看次数

Dispatcher和SynchronizationContext类

有人可以告诉我何时使用a Dispatcher以及何时使用该SynchronizationContext课程?

有一段时间我一直在使用Dispatcher从后台线程排队任务,然后我发现了SynchronizationContext.

wpf dispatcher synchronizationcontext

12
推荐指数
1
解决办法
7056
查看次数

我的异步任务总是阻止UI

在WPF 4.5应用程序中,我不明白为什么在使用await + a task时UI被阻止:

    private async void Button_Click(object sender, RoutedEventArgs e)
    {
        // Task.Delay works great
        //await Task.Delay(5000);

        double value = await JobAsync(25.0);

        MessageBox.Show("finished : " + value.ToString());
    }

    private async Task<double> JobAsync(double value)
    {
        for (int i = 0; i < 30000000; i++)
            value += Math.Log(Math.Sqrt(Math.Pow(value, 0.75)));

        return value;
    }
Run Code Online (Sandbox Code Playgroud)

等待Task.Delay工作得很好,但等待JobAsync阻止了UI.为什么?谢谢.

c# multithreading asynchronous dispatcher async-await

12
推荐指数
2
解决办法
8185
查看次数

如何使用 Windows App SDK 在 WinUI 3 桌面中获取 DispatcherQueue

在 WPF 中,所有控件都继承 DispatcherObject,并且可以轻松访问 Dispatcher。

如何使用 WinUI 3 Windows App SDK 获取 DispatcherQueue 并在 ViewModel 中使用它?

编辑

我的实现扩展了 mm8 最受赞赏的答案。

在我的 ViewModel 中创建一个属性

public Microsoft.UI.Dispatching.DispatcherQueue TheDispatcher { get; set; }

然后在我的 MainPage.xaml.cs 代码隐藏中获取调度程序Constructor

ViewModel.TheDispatcher = Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();

现在我的虚拟机中有调度程序,因此可以轻松地从虚拟机使用它:

TheDispatcher.TryEnqueue(() =>
{
     // some ui thread work
});
Run Code Online (Sandbox Code Playgroud)

注意:我没有将此作为答案发布,因为有一个答案,这是我的实现,旨在帮助任何感兴趣的人。

.net c# dispatcher winui-3 windows-app-sdk

12
推荐指数
1
解决办法
8305
查看次数

Dispatcher.BeginInvoke问题

我得到"此代码的非静态字段,方法或属性'System.Windows.Threading.Dispatcher.BeginInvoke(System.Action)'"需要对象引用.

private void ResponseCompleted(IAsyncResult result)
    {
        HttpWebRequest request = result.AsyncState as HttpWebRequest;
        HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse;

        using (StreamReader sr = new StreamReader(response.GetResponseStream()))
        {
            Dispatcher.BeginInvoke( () => {
                try
                {
                    XDocument resultsXml = XDocument.Load(sr);
                    QueryCompleted(new QueryCompletedEventArgs(resultsXml));
                }
                catch (XmlException e)
                {
                    XDocument errorXml = new XDocument(new XElement("error", e.Message));
                    QueryCompleted(new QueryCompletedEventArgs(errorXml));
                }
            });

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# dispatcher

11
推荐指数
2
解决办法
2万
查看次数

Ampps的问题

我在我的本地Ampps服务器上安装了Impresspages.当我继续打开它时,我收到错误消息:

错误

Fatal error: Call to undefined function Ip\ctype_digit() in /Applications/AMPPS/www/impresspage/Ip/Dispatcher.php on line 197
Run Code Online (Sandbox Code Playgroud)

这是Dispatcher.php的第197行:

if (ctype_digit($priority)) {
Run Code Online (Sandbox Code Playgroud)

我该怎么解决这个问题?

php install dispatcher fatal-error

11
推荐指数
1
解决办法
5842
查看次数

Akka消息传递机制的例子

我有相当数量的Apache Camel(路由/调解/编排引擎;轻量级ESB)经验,并试图了解Akka之间的区别:

  • 调度员(Dispatcher,PinnedDispatcher,CallingThreadDispatcher)
  • 路由器
  • 活动巴士

根据文件:

调度员是:

...是让Akka演员"打勾"的原因,它可以说是机器的引擎.

但这并没有真正解释调度员是什么或与演员的关系是什么.

路由器是:

消息可以通过路由器发送,以有效地将它们路由到目标参与者,称为路由器.路由器可以在actor的内部或外部使用,您可以自己管理路由或使用具有配置功能的自包含路由器actor.但这听起来很像调度员.

游泳池是:

[一种]路由器[that]创建路由器作为子actor,如果它们终止则将它们从路由器中删除.

团体是:

[类型] actor [路由]在路由器外部创建,路由器使用actor选择将消息发送到指定路径,而不监视终止.

活动巴士是:

...向演员组发送消息的方法

这听起来就像调度员和路由器.

所以我的主要关注点是:

  • 调度员,路由器和事件总线之间有什么区别,以及何时使用它们?
  • 何时使用池vs组?

routing dispatcher akka event-bus

11
推荐指数
1
解决办法
2658
查看次数

如何检测Dispatcher.DisableProcessing是否处于活动状态?

如果Dispatcher挂起(Dispatcher.DisableProcessing()调用),则尝试显示消息框时会引发异常.

InvalidOperationException:'Dispatcher processing has a suspended'(参见此处).

有谁知道我怎么能检测到Dispatcher暂停的地方(所以我知道什么时候打电话BeginInvoke())?

编辑1:

为了响应Application.DispatcherUnhandledException事件,我试图显示一个MessageBox.但是,如果在DataBinding(即ItemsControl.ItemsSource)期间抛出此未处理的异常,Dispatcher则会暂停.试图显示MessageBox然后失败.总是使用Dispatcher.BeginInvoke()解决问题,但我不想这样做,除非真的有必要.

编辑2:

使用Reflection完成此操作的方式如下:

var dispatcherType = typeof(Dispatcher);
var countField = dispatcherType.GetField("_disableProcessingCount", BindingFlags.Instance | BindingFlags.NonPublic);
var count = (int)countField.GetValue(Dispatcher.CurrentDispatcher);
var suspended = count > 0;
Run Code Online (Sandbox Code Playgroud)

wpf dispatcher

10
推荐指数
1
解决办法
3702
查看次数

什么是计算机科学的批量?

我正在读Akka的调度员,我了解到它用于批量处理.什么是计算机科学的批量?

computer-science dispatcher akka

10
推荐指数
2
解决办法
2174
查看次数