这是我发送到ZeroMQ邮件列表的帖子的副本.然而,问题是它不是特定于ZeroMQ,而是更普遍的关于在WinRT中提供的网络功能的"映射"层的需要,以便在针对WinRT编译时为C++代码提供更正常的"Berkeley Socket facade":
大家好,我之前在移动应用程序中使用过ZeroMQ(请参阅http://www.ibuzzedfirst.com),对于iPhone和Android版本,因为这些平台支持本机/ C++/Socket开发,因此支持ZeroMQ.
对于WindowsPhone 7.5(OS 7.1)版本,我必须从头开始重新实现任何所需的ZeroMQ功能,因为WinPhone 7.5仅支持C#,而不支持C++(它实际上是C#Silverlight应用程序).此外,WinPhone 7.5仅提供其自己的"版本"Socket支持(http://msdn.microsoft.com/en-us/library/sb27wehh%28v=vs.95%29.aspx),它仅支持Async版本的功能,例如ConnectAsync,SendAync,ReceiveAsync等.然而,缺乏C++使得这个问题没有实际意义.
因此,对于WindowsPhone 7.5版本,我仅将应用程序限制为"客户端"(参赛者)功能,并且没有实现"服务器"(测验大师)部分.这是因为应用程序的客户端部分仅发送和接收对服务器的请求,回复和订阅,而服务器利用ZeroMQ的固有多线程多用户功能.为客户端使用重新创建ZeroMQ传输协议/标头(相对)简单,并使用WindowsPhone套接字支持来提供通信.
好的,现在我正在考虑将应用程序移植到Windows 8上的WinRT.(桌面/平板电脑版本首先 - Windows Phone 8 RT SDK还没有出来,但是会类似).好消息是WinRT支持C++,是的!(实际上,它仍然不是那么简单,当编写C#只有WinRT应用程序时,你可以编译'AnyCPU',只要你包含一个C++部分,你就必须构建3个不同的版本 - x86/Win32,x64和ARM版本,但这是一个不同的问题).
不幸的是,像Windows 7/8 Phone一样,WinRT不支持'普通'Berkeley Socket访问,而是提供自己的'版本'的Socket编程,带有用于不同套接字场景的离散类,例如用于连接TCP客户端的StreamSocket(http) ://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocket.aspx#methods),用于可绑定TCP服务器的StreamSocketListener(http://msdn.microsoft.com/en -us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx#methods)和UDP版本的DatagramSocket/DatagramSocketListener.此外,仅提供所有方法的异步版本.
所以看起来,要让ZeroMQ在WinRT上成功编译,我将不得不编写一个Facade层来提供类似Berkeley Socket的C++接口,并在下面执行必要的映射到WinRT提供的Socket编程版本.
有没有其他人开始这个旅程或写一个类似的门面?有兴趣听取每个人的想法,特别是WinRT看起来非常"重要"!
是否有任何替代IsSubclassOf或IsAssignableFrom在C#Metro风格?
我正在尝试使这个代码在Metro上运行,但无法找到替代方案.
if ((ui.GetType() == type) || (ui.GetType().IsSubclassOf(type)))
{
return true;
}
Run Code Online (Sandbox Code Playgroud) 我想知道屏幕分辨率,以便我可以根据Windows 8应用程序中的分辨率设置元素的高度.
我正在整理一个与Stack API接口的应用程序,并且一直在关注本教程(虽然旧的API版本仍然有效).我的问题是,在Windows 8商店应用程序中使用它时,我受.NETCore Framework的限制,它不支持GetCustomAttributes下面找到的方法:
private static IEnumerable<T> ParseJson<T>(string json) where T : class, new()
{
var type = typeof (T);
var attribute = type.GetCustomAttributes(typeof (WrapperObjectAttribute), false).SingleOrDefault() as WrapperObjectAttribute;
if (attribute == null)
{
throw new InvalidOperationException(
String.Format("{0} type must be decorated with a WrapperObjectAttribute.", type.Name));
}
var jobject = JObject.Parse(json);
var collection = JsonConvert.DeserializeObject<List<T>>(jobject[attribute.WrapperObject].ToString());
return collection;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是双重的.GetCustomAttributes在Windows 8 Store App领域的限制范围内,该方法究竟做了什么以及与此方法等效?
据我了解,WinRT是不使用底层Win32 API编写的WPF的不同版本.
WinRT和WPF的关系是什么?WPF是否可以在Windows 7的Metro下工作,还是会推出经典桌面?
从主题演讲中不太清楚.如果安装了Windows 8的人可以确认它的行为.
谢谢
我目前正致力于将应用程序移植到UWP.该应用程序有一个页面,其中包含"写入NFC"按钮.在用户点击它之后,它等待NFC标签并写入LaunchApp:WriteTag二进制消息.
什么在WP8.1下工作正常,在Windows 10 UWP下根本不起作用:
var proximityDevice = Windows.Networking.Proximity.ProximityDevice.GetDefault();
if (proximityDevice != null)
{
var launchArgs = "user=default";
var appId = "App";
var appName = Windows.ApplicationModel.Package.Current.Id.FamilyName + "!" + appId;
var launchAppMessage = launchArgs + "\tWindows\t" + appName;
var dataWriter = new Windows.Storage.Streams.DataWriter();
dataWriter.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf16LE;
dataWriter.WriteString(launchAppMessage);
var launchAppPubId = proximityDevice.PublishBinaryMessage("LaunchApp:WriteTag", dataWriter.DetachBuffer());
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.NFC功能已启用,WP8.1应用程序可在同一部手机上运行,因此这不应成为问题.
我已经尝试了多种格式,因为问题似乎是launchAppMessage,我没有找到UWP文档.有一篇Windows 8+ MSDN文章,它描述了格式为的字符串:
myArgs\tWindows\tAppFamilyName!App
Run Code Online (Sandbox Code Playgroud)
我尝试了什么:
myArgs 足够短 - 不应该是一个问题.Windows或者WindowsPhone没有任何区别.两者都不起作用.AppFamilyName是我的应用程序清单中的正确应用程序系列名称.该应用程序与商店相关联,看起来这也不应该是问题.App是<Application id="App" ... />我的应用程序清单中的内容.尝试 …有没有人去创建一个对集合进行排序的视图?ICollectionView接口存在,它声称与WPF/SL对应(排序,分页,过滤)具有相同的职责,但是,除非我遗漏了某些内容,否则接口上没有排序方法/属性.
我有兴趣了解如何获取项目集合,然后通过WinRT中的视图对它们进行排序.
注意,我知道我可以手动执行此操作,但是,我想看看排序集合如何与WinRT主题转换交互,这些转换似乎在执行排序时添加了视觉效果.
我需要从Windows 8 WinRT/Metro应用程序知道我的实际本地IP地址(即不是环回地址).我需要这几个原因.最简单的是,在应用程序的UI中,我想显示一些文本,例如"您的本地网络IP地址是:[从代码查询的IP]".
我们还使用该地址进行一些额外的网络通信.这些通信是完全有效的,因为如果我查看控制面板中的IP地址,然后将其硬编码到应用程序中,这一切都有效.在对话框中询问用户去查看地址并手动输入它是我真正想要避免的.
我认为以编程方式获取地址并不是一项复杂的任务,但我的搜索引擎和StackOverflow技能空洞.
在这一点上,我开始考虑做一个UDP广播/监听循环来听取我自己的请求并从中提取地址,但这看起来真的像一个hackey kludge.在WinRT的新东西中是否有一个API可以让我在那里?
请注意,我说"WinRT应用程序.这意味着典型的机制喜欢Dns.GetHostEntry或NetworkInterface.GetAllInterfaces()不会工作.
我正在开发一个应用程序,由于遗留代码的原因我无法升级为新的HttpClient所以我正在使用HttpWebRequests.
在.NET 4中,我们可以使用ServicePoint.Expect100Continue属性停用Expect标头(在帖子请求上) ,但在WinRT上它不可用.
如何在WinRT上完成?
编辑:System.Net.ServicePointManager.Expect100Continue也不可用.
如何从RGB代码中Brush设置例如a的背景Grid.
我认为RGB代码是int:
R = 12
B = 0
G = 255
Run Code Online (Sandbox Code Playgroud)
我需要知道如何将其转换为 Brush
windows-runtime ×10
c# ×7
windows-8 ×6
.net ×2
.net-core ×1
nfc ×1
reflection ×1
sockets ×1
uwp ×1
windows-10 ×1
wpf ×1
xaml ×1
zeromq ×1