我的印象是,dispatcher将遵循排队的操作的优先级,并根据优先级或操作添加到队列的顺序(如果相同的优先级)执行操作,直到我被告知这不是案件的情况WPF UI dispatcher.
有人告诉我,如果UI线程上的操作持续时间较长,则表示数据库读取UI调度程序只是尝试执行队列中的下一组操作.我无法接受它,因此决定编写一个示例WPF应用程序,其中包含一个按钮和三个矩形,点击按钮,矩形填充不同的颜色.
<StackPanel>
<Button x:Name="FillColors" Width="100" Height="100"
Content="Fill Colors" Click="OnFillColorsClick"/>
<TextBlock Width="100" Text="{Binding Order}"/>
<Rectangle x:Name="RectangleOne" Margin="5" Width="100" Height="100" Fill="{Binding BrushOne}" />
<Rectangle x:Name="RectangleTwo" Margin="5" Width="100" Height="100" Fill="{Binding BrushTwo}"/>
<Rectangle x:Name="RectangleThree" Margin="5" Width="100" Height="100" Fill="{Binding BrushThree}"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
并在代码隐藏
private void OnFillColorsClick(object sender, RoutedEventArgs e)
{
var dispatcher = Application.Current.MainWindow.Dispatcher;
dispatcher.BeginInvoke(new Action(() =>
{
//dispatcher.BeginInvoke(new Action(SetBrushOneColor), (DispatcherPriority)4);
//dispatcher.BeginInvoke(new Action(SetBrushTwoColor), (DispatcherPriority)5);
//dispatcher.BeginInvoke(new Action(SetBrushThreeColor), (DispatcherPriority)6);
dispatcher.BeginInvoke(new Action(SetBrushOneColor));
dispatcher.BeginInvoke(new Action(SetBrushTwoColor));
dispatcher.BeginInvoke(new Action(SetBrushThreeColor));
}), (DispatcherPriority)10);
}
private void SetBrushOneColor() …Run Code Online (Sandbox Code Playgroud) 我正在评估Visual Studio 2012,并且在颜色模式方面遇到了一些问题.
当然,通过为文本编辑器设置颜色,我能够克服最初的不适.
我无法设置的一件事是类名的颜色.假设你有一条如下所示的线.
Class name = new Class();
Run Code Online (Sandbox Code Playgroud)
整条线的颜色相同,期望新的关键字.
我希望"类"这个词与早期版本的Visual Studio中的颜色不同.
我无法从Option中为此设置颜色.
我已尝试在
工具 - >选项 - >环境 - >字体和颜色下的所有字段(例如纯文本,文字,标识符等
)处理颜色,但我仍然无法解决此问题.我也应用了客户主题,这些也没有帮助.
我不想为这样的基本偏好安装生产力电动工具吗?
编辑:
我使用的是Windows 7 x64和Visual Studio Professional 2012,版本11.0.50727.1 RTMREL
我开发了一个 WCF 服务,用于在组织的以太网中使用。
该服务当前托管在 Windows 服务上并使用net.tcp绑定。服务中定义了
2 个operation contracts。
连接到此服务的客户端是一个长时间运行的 Windows 桌面应用程序。
员工(> 30,000)通常让这个客户端从周一早上到周五晚上连续运行一周。
在此生命周期内,可能会根据主桌面客户端上的特定用户操作对相关 wcf 服务进行多次调用。让我们假设主桌面应用程序上每 3 个操作中的 1 个将触发对我们服务的调用。
现在我们计划在每个员工的桌面上部署这个窗口服务,
我也使用 `autofac` 作为依赖解析器容器。
我的 WCF 服务实例上下文是 `PerSession`,但理想情况下,我们在同一个桌面上运行客户端和服务(目前),所以我计划使用 `autofac` 容器为每个新会话注入相同的服务实例。
现在不会更改服务实现上的“InstanceContext”属性,因为将来我可能会在不同的托管环境中部署相同的服务,我希望每个会话都有一个新的服务对象实例。
就像前面提到的,客户端是一个长时间运行的桌面应用程序,我已经读过,为每个调用“打开”和“关闭”代理是一个很好的做法,但如果我将服务保留为 PerSession,它将创建一个新的服务实例对于每个调用,鉴于服务和客户端具有 1-1 映射,这可能不需要。
另一个论点是我计划在这个环境中为每个会话注入相同的实例,所以每个服务调用的打开和关闭应该无关紧要?
那么我应该采用哪种方法,为每次调用创建服务“单例”并打开关闭,或者在桌面应用程序加载/第一次服务调用时打开客户端代理,然后仅在桌面应用程序关闭时关闭它?
我想从模态窗口获取我的应用程序的一些用户输入,如Name,DOB等
,为此我需要显示一个对话框,其中包含文本框和其他控件.
通常在WinForms/WPF中我会创建一个继承自Form/Window类的类,并使用Show/ShowDialog方法向用户呈现表单
如何在使用XAML/C#的Windows 8 metro应用程序中实现此行为?
我查看MessageDialog了Windows.UI.Popups命名空间下的类,
但它只显示了经典MessageBox之类的消息.
我看过另一个CoreWindowFlyout类,也不确定是否可以用于我期待的行为.