问题标签 [winrt-component]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Pattern for an async method that returns something immediately
If I write a simple function I can get a result immediately. If I use async/await
and return a Task
- the method will kinda return when it's done with the task, but what if I need to write a method that needs to return immediately, but then continue updating the result and potentially eventually complete the task? Also what if I want to expose it outside a WinRT Component library for consumption in components in other languages? How would I do it in C# and how would I do it in C++/CX? Or JS perhaps?
Example 1:
I want to expose a property that returns an ImageSource
so I can immediately bind it from my MVVM view model to the XAML view. The method to load the ImageSource
is going to be in a separate class that is exposed outside a WinRT Component (it is a public method). Now I want that method to be awaitable, or at least somehow return a task I can await but also immediately return the ImageSource
so the property I call it from can immediately return since properties can't be async. The caller doesn't know what type the ImageSource
will be so it cannot instantiate it since ImageSource
is virtually an abstract type and is typically represented as a BitmapImage
or WriteableBitmap
and in my case both can be returned from the method. Obviously the method itself immediately knows whether it is going to return either of the types of objects, but it takes some time to read/create and or decode the image.
I'm thinking the signature might be something like this in C#
and I would simply not await the result of the method in the property accessor, but I'm thinking I'll be able to return the bitmap argument immediately, while when called elsewhere or event elsewhere in the code of my view model I'll be able to await or cancel the task.
Example 2:
I want to be able to list files from a disk and get a task that is complete when all files have been listed, but immediately return an IObservableVector of view models representing the files for use in my XAML UI that updates as pages of the files are loaded asynchronously.
Here I would probably do something similar:
Problems
Now the above look almost good, but I don't think I can expose a TPL Task outside a WinRT Component since Task
is not a WinRT type, so I'd probably gave an internal method like the above and a public one that wraps the result as an IAsyncOperation
by calling AsyncInfo.Run()
, passing the task and cancellation token. ObservableCollection
is also .NET only, so I'd probably need to create a wrapper around it that implements an IObservableVector
since I don't think one is available in .NET. There are probably other potential problems with those and I am not sure if this design is right.
Then also - how would I do all this in C++/CX? Or JS?
javascript - 从 WinRT 组件项目访问 Metro JS 项目中的图像文件
我正在开发一个 JavaScript Metro 应用程序,我发现要从 JavaScript 调用 C# 代码,我必须在我的解决方案中使用 Windows 运行时组件项目。现在我需要检查一些添加到“images”文件夹中的 JavaScript Metro 应用程序中的图像,如果它们在那里,我需要将它们复制到应用程序本地文件夹中。
首先我尝试使用该方法
但它会引发无法找到位置/文件路径的异常。
我认为这可能是因为项目的名称空间不同。该图像已添加到 JavaScript Metro 应用程序项目中,我正在尝试从 Windows 运行时组件项目中使用它。
所以我尝试为图像文件传递一个硬编码路径,如“E://projects/myProject/myProject/images/logo.png”,并尝试使用方法
但它会抛出文件路径格式不正确的异常。
我可以从同一解决方案中的 Windows 运行时组件项目访问 JavaScript Metro 应用程序项目中添加的文件吗?并将其复制到应用程序本地文件夹中?
谢谢。
windows-runtime - 在 Windows 8 运行时组件中使用 C fopen
我在 Windows 8.1 Store (Metro) 应用程序的 Windows 运行时组件 (C++) 中使用跨平台库。该库进行 C 样式文件调用,例如fopen
,stat
等。
当文件在本地应用程序范围内(例如在应用程序的本地目录中)时,这些操作可以正常工作。但如果文件位于其他位置(例如在“桌面”上),则这些操作将失败。有没有办法fopen
在本地应用程序文件夹之外进行其他文件调用而无需切换到StorageFile
?作为替代方案,我只能考虑将所有文件复制到本地应用程序文件夹。
问候,
windows-phone-8 - 在第二次运行应用程序时等待任务导致异常
设置:我有一个包含一些 PCL 的代码库,其中一个 PCL 是一组调用我的 WCF 数据服务的数据访问类。我利用 Task.Factory.FromAsync 来管理调用 WCF 数据服务的 beginExecute/endExecute。然后我等待结果并将数据发送到应用程序。我首先创建了一个 Win Store 应用程序,一切都很好。现在我正在创建一个win phone 8 UI。现在我遇到了障碍。在等待由 Task.Factory.FromAsync 方法创建的任务的行上,障碍似乎是一个例外。更复杂的是,如果我第一次安装并运行该应用程序,则不会发生异常。我第二次打开应用程序时抛出错误。所以我' 我真的很困惑为什么第二次运行会导致错误,因为所有相同的逻辑都被遵循。我得到的异常不是来自我的代码中的任何内容,而是来自 .NET 库本身。我尝试了其他一些方法来尝试解决这个神秘的问题。我创建了一个 Task.Delay() 任务并且该行没有问题,但是当我对其任务调用 await 时,我得到了完全相同的错误。我试图只获取 Task.Result 而不是等待它,并且从未返回结果,因此应用程序只是挂起(并且也从未引发异常)。Delay() 任务并且该行没有问题,但是当我对其任务调用 await 时,我得到了完全相同的错误。我试图只获取 Task.Result 而不是等待它,并且从未返回结果,因此应用程序只是挂起(并且也从未引发异常)。Delay() 任务并且该行没有问题,但是当我对其任务调用 await 时,我得到了完全相同的错误。我试图只获取 Task.Result 而不是等待它,并且从未返回结果,因此应用程序只是挂起(并且也从未引发异常)。
我在我的 WinRT 应用程序中没有遇到任何问题,所以我猜我的所有逻辑都是合理的,不应该有任何奇怪的线程问题等。
例外:
mscorlib.ni.dll 中发生了“System.Reflection.TargetInvocationException”类型的第一次机会异常当我收到此异常时,我还在 Visual Studio 中看到一个选项卡,上面写着“源代码不可用”。这对我来说很有意义,但这个例外并不能帮助我解决所有问题,我无法获得更多细节。我似乎找不到内部异常(如果有的话)来获取更多细节。
编码:
错误发生在“return await task.ContinueWith((result) =>”这一行。如您所见,我添加了一个 try/catch,这甚至无助于解决问题,因为从未调用过 catch 块.
任何建议都将不胜感激,包括问题的解决方案或调试帮助以获得更好的异常细节。我刚刚绞尽脑汁想弄清楚这一点,但我做不到了。这真的很令人沮丧,因为我希望所有的辛勤工作都可以通过 WinRT 应用程序完成,而现在我需要做的就是在 windows phone 8 上创建一个快速简单的 UI。我希望给我的老板一个甜蜜的惊喜,说你想要一个 WinRT 应用程序,但我们能够重用我们的所有代码,并轻松获得两个平台,而额外的工作最少。非常感谢您的帮助,谢谢!
windows-runtime - C4827 警告覆盖 C++/CX Metro 类中的 ToString
我有一个 C++/CX Windows Store 组件类,我想实现一个可以从 C# 调用的自定义公共 ToString 方法。它编译得很好,但是我从编译器那里得到了一个奇怪的警告。这是重现警告的代码:
当我编译上述类时,Visual Studio 2013 显示此警告:
警告 C4827:具有 0 个参数的公共“ToString”方法应标记为虚拟并覆盖 (Foo.cpp)
但是,当我在方法签名上添加“虚拟覆盖”时,编译器中会出现语法错误。如何从 C++/CX 类中覆盖 Object.ToString()?
c++ - Windows RT 组件,获取应用的核心窗口
我只有一个简单的问题,我正在制作一个 Windows 运行时组件(如在库中),如何获取应用程序的窗口对象?CoreWindow::GetForCurrentThread() 引发异常,因为该库似乎在与应用程序不同的线程中运行。有人知道如何获取应用程序窗口吗?
编辑:GetForCurrentThread 不是问题,它似乎只适用于 UI 线程而不是后台线程,我想要一种从后台线程获取它的方法。可能吗?
c# - GridView 中的不同项目
我正在尝试为我的 Windows 应用商店应用程序实现以下“开始屏幕”界面。
我认为 Gridview 将是要使用的组件。
如何在 GridView 中显示不同类型的项目?
这是一个好方法吗:
和类
windows-phone-8 - 什么是消息对话框“在商店中搜索应用程序?” 在 Windows Phone 8.1 Web 视图中
我正在为 Windows Phone 8.1 应用为 android 和 ios 制作的 WebView。
但在 Windows Phone 8.1 中,每次浏览页面时都会启动一个奇怪的消息对话框。
什么html代码导致了这个?我希望对话框不启动。
c# - Toast notification & Geofence Windows Phone 8.1
I'm facing a strange problem with my Windows Phone 8.1 App. The App will send a toast notification every time the user is near a Point of his interest using Geofence Quickstart: Setting up a geofence and BackgroundTask Quickstart: Listening for geofence events in the background
And this is the Background task (example)
Now the problem is that if I run the App from VS all works fine and the Toast is triggered once entered the specific Area... if I install the App on the device using the Windows Phone Application Deployment the app works fine, and same using the Emulator. But once Uploaded to the store, I've downloaded the App and the Toast, Geofence or BackgroundTask doesn't work anymore (I guess the problem is one of those three but I don't know who is the culprit :s)... the toast notification just won't trigger..
I've also noticed that my App isn't listed in the "Notification+Action" settings, but in the the Package.appxmanifest I've set Toast Capable: YES.
Anyone knows how to solve this? Thanks
c# - 如何实现代理组件:Windows Store App
使用此处的说明:http: //visualstudiogallery.msdn.microsoft.com/527286e4-b06a-4234-adde-d313c9c3c23e
使用 Update 2 以管理员身份运行 Visual Studio 2013。
我创建了一个 C# BWRC 项目 TestBwrc。在 Class.cs 中,我添加了一个返回 1 的 int 属性。
我向解决方案添加了一个新项目,一个名为 TestBwrc.Ps 的 C++ Brokered Windows ProxyStub。
我添加了对 TestBwrc 项目的引用,并将项目链接器属性设置为注册输出。
然后我构建解决方案。
我向解决方案添加了一个新项目,一个名为 TestBwrc.Client 的 C# 空白 Windows 商店应用程序。我添加了对 TestBwrc.Ps 项目的引用。解决方案构建时没有错误或警告。
在 App.xaml.cs OnLaunched 方法中,我添加了 TestBwrc.Class c = new TestBwrc.Class(); Visual Studio 抱怨“无法解析符号‘类’”解决方案生成时没有错误或警告。
运行应用程序会引发异常,TestBwrc.Class 未注册。
我错过了什么?
编辑:
同样在 TestBwrc.Client 上,我将 Extensions 标记添加到应用程序清单中,ClassId 为 TestBwrc.Class,路径值为“..\Debug\TestBwrc.Ps”