标签: windows-runtime

下一个Windows的主要开发框架是什么?

一些文章指出Windows 8开发是基于HTML的,而不是主要使用本机代码,如C或C++(直到现在)或.NET(现在,甚至更多,就像在Longhorn中一样,但从来没有了.)

这是真的?是否可以从Javascript访问核心API?Windows 8的主要API /框架是什么?

winapi windows-8 windows-runtime

16
推荐指数
3
解决办法
1647
查看次数

WinRT是否仍然具有相同的旧UI线程限制?

在WinForms中,几乎所有UI都是特定于线程的.您必须使用[STAThread]以便公共对话框可以工作,并且您不能(安全地)从创建它的任何线程之外的任何线程访问UI元素.从我所听到的,那是因为这就是Windows的工作方式 - 窗口句柄是特定于线程的.

在WPF中,保留了这些相同的限制,因为最终它仍然建立在相同的Windows API之上,仍然是窗口句柄(尽管主要用于顶级窗口),等等.事实上,WPF甚至使事情更具限制性,因为你甚至无法跨线程访问位图等内容.

现在一直是WinRT,一种全新的访问Windows的方式 - 一个新鲜,干净的平板.我们是否仍然坚持使用相同的旧线程限制(具体来说:只能从创建它的线程中操作UI控件),还是让他们打开它?

multithreading windows-runtime

16
推荐指数
2
解决办法
3455
查看次数

从WinRT中的线程更新UI

自从几天前发布了Windows 8消费者预览版以来,我正在使用C#开发新的WinRT(用于Metro应用程序),并且已经将我自己编写的IRC类移植到新的线程和网络中.

问题是:我的类正在运行一个线程,用于从服务器接收消息.如果发生这种情况,线程正在进行一些解析,然后触发事件以通知应用程序.然后,订阅的功能"应该"更新UI(文本块).

这是问题,线程无法更新UI,并且似乎不再可能使用.NET 4.0的调用方法.是否有更新的解决方法,甚至是更新UI的更好方法?如果我尝试从事件订阅者更新UI,我将得到Exception:

该应用程序调用了一个为不同线程编组的接口(来自HRESULT的异常:0x8001010E(RPC_E_WRONG_THREAD))

c# windows-runtime

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

如何同步任务?

假设我有一个保存到文件的异步方法:

async Task SaveToFileAsync()
{
   var file = await folder.GetFileAsync ( ...)
   var stream = file.OpenFileAsync(...)
   ///etc

}
Run Code Online (Sandbox Code Playgroud)

现在想象SaveToFileAsync同时被调用两次.这是一个问题,因为您无法同时在同一文件上写入

如果这是一个常规方法,lock()将解决这个问题:

void SaveToFile()
{
   lock(something)
   {
      /// code here
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,异步方法中不允许锁定.

当然,可以调用Monitor.Enter()或使用互斥锁,但这些对象可以使用线程,而不是任务.因此他们不是答案.

因此,由于lock()不是一个选项,如何同步多个任务?特别是,我应该编写什么代码以确保一次只调用一次"SaveToFileAsync"?

c# asynchronous task microsoft-metro windows-runtime

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

如何进行Metro风格应用的UI自动化?

我已经下载并安装了Windows 8消费者预览版,我想弄清楚如何使用UI Automation API来从metro风格的应用程序中获取数据.

背景:我有很多自动化测试,它们使用Microsoft UI Automation API与应用程序进行交互.这些脚本是用IronRuby编写的,针对.NET 4

最初,我只想检查开始菜单是否可见(如果是,请关闭它)

根据微软的说法,普通的UI Automation API应该能够访问和控制metro风格的应用程序,但问题是,我无法弄清楚我的代码如何实际访问metro应用程序的UI?我们查看UI自动化数据的正常方式是使用UISpy,但是当我在Windows 8下运行UI间谍并启动一个metro应用程序时,没有提到它......似乎地铁应用程序(包括启动屏幕)被围住了离开桌面.

如果我在UISpy中找不到Metro应用程序,我怎样才能找到他们的自动化ID,以及如何从我的自动化测试脚本中找到它们?

ui-automation windows-8 windows-runtime

16
推荐指数
2
解决办法
9011
查看次数

使用await的异步lambda表达式返回Task?

我有以下代码:

            // Get all of the files from the local storage directory.
        var files = await folder.GetFilesAsync();

        // Map each file to a stream corresponding to that file.
        var streams = files.Select(async f => { return await f.OpenStreamForWriteAsync(); });
Run Code Online (Sandbox Code Playgroud)

我希望它是streams类型的,IEnumerable<Stream>但事实上它是IEnumberable<Task<Stream>>,这是我所期望的,如果我省略了await关键字.返回类型OpenStreamForWriteAsyncTask<Stream>- 肯定等待它应该产生一个Stream

那么,为什么return await语句返回一个Task?

谢谢你的帮助.

c# async-await windows-runtime

16
推荐指数
1
解决办法
1万
查看次数

如何等待Linq查询中的方法

试图awaitLINQ查询中使用关键字,我得到这个:

'await'运算符只能用在初始'from'子句的第一个集合表达式中的查询表达式中,或者用在'join'子句的集合表达式中

示例代码:

var data = (from id in ids
            let d = await LoadDataAsync(id)
            select d);
Run Code Online (Sandbox Code Playgroud)

是不可能等待LINQ查询中的某些内容,还是需要以不同的方式构建它?

linq async-await c#-5.0 windows-runtime winrt-async

16
推荐指数
1
解决办法
1万
查看次数

在键盘事件中使用CancellationToken调用Task.Delay时的TaskCanceledException

我试图延迟在WinRT中从键盘事件调用的方法(在示例中为SubmitQuery())的处理,直到一段时间内没有其他事件(在这种情况下为500毫秒).

我只想在我认为用户输入完成后运行SubmitQuery().

使用下面的代码,当Task.Delay(500,cancellationToken.Token)时,我不断收到System.Threading.Tasks.TaskCanceledException; 叫做.我在这做错了什么?

CancellationTokenSource cancellationToken = new CancellationTokenSource();

private async void SearchBox_QueryChanged(SearchBox sender, SearchBoxQueryChangedEventArgs args)
{

        cancellationToken.Cancel();
        cancellationToken = new CancellationTokenSource();

    await Task.Delay(500, cancellationToken.Token);

    if (!cancellationToken.IsCancellationRequested)
    {
        await ViewModel.SubmitQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# asynchronous cancellationtokensource windows-runtime cancellation-token

16
推荐指数
4
解决办法
8084
查看次数

Universal Windows Platform是Windows 8和Windows Phone应用程序的WinRT的替代品吗?

Universal Windows Platform是Windows 8和Windows Phone应用程序的WinRT的替代品吗?我的意思是,有一个WinRT平台专门为Windows 8开发Metro应用程序.现在,它被UWP取代,不是吗?

windows-8 windows-runtime windows-8.1 win-universal-app windows-10

16
推荐指数
2
解决办法
6398
查看次数

使用编译的绑定(x:bind),为什么我必须调用Bindings.Update()?

我目前正在尝试新编译的绑定,并且已经达到(再次)我错过了一个难题的一个点:为什么我必须打电话Bindings.Update?到现在为止,我认为实施 INotifyPropertyChanged已经足够了?

在我的例子中,如果我调用这个神秘的方法(由编译的绑定自动生成),GUI只显示正确的值.

我正在使用具有以下(此处简化的)xaml语法的用户控件:

<UserControl>
  <TextBlock Text="x:Bind TextValue"/>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

where TextValue是此用户控件的简单依赖项属性.在页面中,我将此控件用作:

<Page>
  <SampleControl TextValue="{x:Bind ViewModel.Instance.Name}"/>
</Page>
Run Code Online (Sandbox Code Playgroud)

哪里:

  • ViewModel是一个在InitializeComponent()运行之前设置的标准属性
  • Instance 是一个简单的实现对象 INotifyPropertyChanged

加载后Instance,我提出了一个属性更改事件Instance.我甚至可以调试到TextValue用户控件的depency属性获取正确值的行 - 但是没有显示任何内容.只有在我打电话时Bindings.Update(),才会显示该值.我在这里错过了什么?

更新

我也没办法{x:Bind ... Mode=OneWay}.

更多代码

Person.cs:

using System.ComponentModel;
using System.Threading.Tasks;

namespace App1 {
    public class Person : INotifyPropertyChanged {
        public event PropertyChangedEventHandler PropertyChanged;

        private string name;
        public string Name { get {
                return this.name;
            }
            set …
Run Code Online (Sandbox Code Playgroud)

c# windows-runtime winrt-xaml win-universal-app

16
推荐指数
1
解决办法
8118
查看次数