我有这种情况:一个客户端将消息发送到msmq队列实例,并且有3个进程侦听此队列.我希望能够让这些实例中的每一个都选择不同的消息并进行处理.
我知道这是队列的常见使用场景,我已经使用MSMQ,.NET和C#为此工作了代码.
但是我想知道msmq是否是我最好的选择 - 文档明确指出MSMQ是用于"一对一"通信,这意味着不应该有多个监听器.
这让我感到疑惑,我正在为我的用例做正确的解决方案吗?或者反过来说,我是否必须为每个侦听器创建一个队列并在工作流的前一部分中分发消息?
将非常感谢在此类场景中演示MSMQ用法的工作示例的链接.
谢谢
我正在为Windows 8项目提供异步服务,并且有一些此服务的异步调用,一次只能调用一次.
public async Task CallThisOnlyOnce()
{
PropagateSomeEvents();
await SomeOtherMethod();
PropagateDifferentEvents();
}
Run Code Online (Sandbox Code Playgroud)
既然你不能在锁语句中封装异步调用,我想到使用AsyncLock
模式,但我认为我可能会尝试这样的事情:
private Task _callThisOnlyOnce;
public Task CallThisOnlyOnce()
{
if(_callThisOnlyOnce != null && _callThisOnlyOnce.IsCompleted)
_callThisOnlyOnce = null;
if(_callThisOnlyOnce == null)
_callThisOnlyOnce = CallThisOnlyOnceAsync();
return _callThisOnlyOnce;
}
private async Task CallThisOnlyOnceAsync()
{
PropagateSomeEvents();
await SomeOtherMethod();
PropagateDifferentEvents();
}
Run Code Online (Sandbox Code Playgroud)
因此,你最终CallThisOnlyOnceAsync
只能同时执行一次调用,并且多个等待者都挂在同一个任务上.
这是一种"有效"的方式,或者这种方法有一些缺点吗?
我一直在关注本教程以添加protobuf-net
到我的WCF项目中.我有一个共享的DTO库.服务器和客户端都使用这些DTO类.我已将所有Service方法[OperationContract]
归因于属性,但我没有[DataContract]
在DTO类上分配任何属性.
我添加了protobuf-net
Nuget包并将配置添加到了web.config
.
我正在使用IIS Express测试我的服务,并认为我应该对目前为止所做的事情感到满意.但是,在测试几个调用之后,我注意到我忘了添加protobuf-net
到我的客户端,但一切都按预期工作(即没有序列化或反序列化的错误).
我怀疑protobuf根本没用在我的程序中,而且我错过了一些东西.我想避免使用[DataContract]
属性,但我可以忍受添加它们,如果这是需要protobuf-net
工作.
我还缺少什么?
我试图围绕一些WPF特定的东西,并且尚未找到UIElement.AddHandler方法和EventManager.RegisterClassHandler方法之间的具体关系.
我已经google了一下,发现了这篇有趣的MSDN文章:
http://msdn.microsoft.com/en-us/library/ms747183.aspx
这里说明:
"路由事件考虑事件的两种不同类型的侦听器:类侦听器和实例侦听器.类侦听器存在,因为类型在其静态构造函数中调用了特定的EventManager API,RegisterClassHandler,或者从元素库中重写了类处理程序虚方法实例监听器是特定的类实例/元素,其中通过调用AddHandler为该路由事件附加了一个或多个处理程序.
好了,所以我知道一个类和它的实例之间的区别,但不知何故,我无法理解文档的这个特定部分.
任何人都可以为我清楚吗?
我在一个项目中广泛使用WebView,但发现它的缺点是成为项目的showstopper.有没有可以在Windows应用商店中呈现HTML的替代方案?
编辑:根据要求,我们对此控件有一些问题:
我们可能会遇到更多问题,这些问题使我们认为它是一个显而易见的问题
我的申请并不复杂.它从Web服务中检索单个实体,对其进行编辑并将其发回.实体本身相当大,有一些协会和几十个属性.把它想象成一个大文件(它实际上是一个文件).
我想过使用多个嵌套视图构建我的应用程序.所以我有一个完整实体的视图和视图模型,但它包含多个视图和各种属性的视图模型.这是一个好方法吗?或者我将来会遇到很多问题?
另外:我如何连接它们?我是否绑定嵌套视图的DataContext的以"实体"("真正的"从域对象)或通过这样来讲话"父"视图模型创建的ViewModels?
我应该使用MVVM Light,Prism还是Caliburn.Micro等MVVM框架?
我有一台带两个硬盘的电脑.在第一个,SSD磁盘,我有Windows分区(C)和第二个(D),raid卷,我安装所有的程序.我还将我的用户文件夹(桌面,文档,下载,图片和视频)移动到D:/Users/David
.
在D:/Program Filles(x86)
.IntelliJIdea13目录上安装IntelliJ Idea后出现D:/Users/David
.没问题,因为一切都很好.然后我安装了Scala插件,创建了一个新的SBT项目并构建它.在此之后,SBT使用的.sbt目录已经存在,C:/Users/David/.sbt
但是我的项目中的库的引用指向了D:/Users/David/.sbt
.问题是,如何强制IntelliJ Idea或Scala插件下载库D:/Users/David.sbt
?
我现在有一个有趣的思考问题,所以也许你们中的某个人可以提供帮助.
基本上我所拥有的是一个字节数组,需要知道该数组中每个项目的顺序 - 按值.哦,伙计,我只会告诉你一个小例子,我认为这会有所帮助:
byte[] array = new byte[4] { 42, 5, 17, 39 }
Run Code Online (Sandbox Code Playgroud)
我希望得到这个结果
4 1 2 3
Run Code Online (Sandbox Code Playgroud)
什么是聪明的方法来做到这一点?
此外,如果条目的值相等,我希望算法保留顺序.所以
new byte[4] { 22, 33, 33, 11 }
Run Code Online (Sandbox Code Playgroud)
应该导致
2 3 4 1
Run Code Online (Sandbox Code Playgroud) 我有一个带有图像控件的ScrollViewer.它显示一个相当大的图像.我希望我的用户能够使用手势放大图像.因此,我在Scrollviewer上启用了ZoomMode.然而,只要用户松开手指,Scrollviewer就会自动滚动回图像的左侧"边缘",从而无法有效地放大和缩小图像.
这是我正在使用的模板:
<DataTemplate x:Key="SingleItemTemplate">
<ScrollViewer ZoomMode="Enabled">
<Grid Margin="5,0,5,0">
<Image Source="{Binding ImageUrlHighRes}">
</Image>
</Grid>
</ScrollViewer>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
我感觉自己像一个总的菜鸟问这个,但无论如何,它在这里:
我想知道从不同线程同步事件的最简单方法是什么.
一些示例代码:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("# started on:" + Thread.CurrentThread.ManagedThreadId);
tt t = new tt();
t.First += new EventHandler(t_First);
t.Second += new EventHandler(t_Second);
Task task = new Task(new Action(t.Test));
task.Start();
while (true)
{
Console.ReadKey();
Console.WriteLine("# waiting on:" + Thread.CurrentThread.ManagedThreadId);
}
}
static void t_Second(object sender, EventArgs e)
{
Console.WriteLine("- second callback on:" + Thread.CurrentThread.ManagedThreadId);
}
static void t_First(object sender, EventArgs e)
{
Console.WriteLine("- first callback on:" + Thread.CurrentThread.ManagedThreadId);
}
class tt
{
public tt() …
Run Code Online (Sandbox Code Playgroud)