标签: windows-store-apps

Windows 8 Runtime(WinRT/Windows应用商店应用程序/ Windows 10通用应用程序)与Silverlight和WPF相比如何?

我试图了解用于创建Metro风格应用程序的新Windows 8 Runtime .我知道你可以在XAML上使用它,它基于.NET,所以C#和VB.NET可以用来编写应用程序,但它似乎与HTML,CSS,DOM和JavaScript有关.

根据.NET UI程序员可以理解的术语,有人可以用几段解释它是什么吗?(我错过了理解它所必需的"关键".)


我们都知道WPF,Silverlight,Windows Forms等将至少在英特尔系统上继续在Windows 8(和Windows 10)下运行,所以请不要告诉我......

wpf windows-runtime windows-store-apps win-universal-app windows-10

353
推荐指数
5
解决办法
4万
查看次数

同步等待异步操作,以及为什么Wait()在这里冻结程序

前言:我正在寻找解释,而不仅仅是解决方案.我已经知道了解决方案.

尽管花了几天时间研究MSDN关于基于任务的异步模式(TAP),异步和等待的文章,但我仍然对一些更精细的细节感到困惑.

我正在为Windows Store应用程序编写一个记录器,我想支持异步和同步日志记录.异步方法遵循TAP,同步方法应该隐藏所有这些,并且看起来像普通方法一样工作.

这是异步日志记录的核心方法:

private async Task WriteToLogAsync(string text)
{
    StorageFolder folder = ApplicationData.Current.LocalFolder;
    StorageFile file = await folder.CreateFileAsync("log.log",
        CreationCollisionOption.OpenIfExists);
    await FileIO.AppendTextAsync(file, text,
        Windows.Storage.Streams.UnicodeEncoding.Utf8);
}
Run Code Online (Sandbox Code Playgroud)

现在相应的同步方法......

版本1:

private void WriteToLog(string text)
{
    Task task = WriteToLogAsync(text);
    task.Wait();
}
Run Code Online (Sandbox Code Playgroud)

这看起来是正确的,但它不起作用.整个程序永远冻结.

版本2:

嗯..也许任务没有开始?

private void WriteToLog(string text)
{
    Task task = WriteToLogAsync(text);
    task.Start();
    task.Wait();
}
Run Code Online (Sandbox Code Playgroud)

这引发了 InvalidOperationException: Start may not be called on a promise-style task.

版本3:

嗯.. Task.RunSynchronously听起来很有希望.

private void WriteToLog(string text)
{
    Task task = …
Run Code Online (Sandbox Code Playgroud)

.net c# task-parallel-library async-await windows-store-apps

301
推荐指数
3
解决办法
10万
查看次数

Signtool错误:没有找到符合Windows Store应用程序所有给定条件的证书?

所以,我正在尝试使用我拥有的pfx文件签署Windows 8 appx包.我正在使用这样的命令:

signtool.exe sign /fd sha256 /f "key.pfx" "app.appx"
Run Code Online (Sandbox Code Playgroud)

从此,我得到:

SignTool错误:未找到符合所有给定条件的证书.

我没有遇到什么"标准"?这仅用于测试,因此这些是自签名证书.我已经尝试导入密钥然后签名,但它总是会导致相同的错误.我该如何解决?

signtool windows-8 windows-store-apps appx

263
推荐指数
14
解决办法
27万
查看次数

我在哪里标记lambda表达式异步?

我有这个代码:

private async void ContextMenuForGroupRightTapped(object sender, RightTappedRoutedEventArgs args)
{
    CheckBox ckbx = null;
    if (sender is CheckBox)
    {
        ckbx = sender as CheckBox;
    }
    if (null == ckbx)
    {
        return;
    }
    string groupName = ckbx.Content.ToString();

    var contextMenu = new PopupMenu();

    // Add a command to edit the current Group
    contextMenu.Commands.Add(new UICommand("Edit this Group", (contextMenuCmd) =>
    {
        Frame.Navigate(typeof(LocationGroupCreator), groupName);
    }));

    // Add a command to delete the current Group
    contextMenu.Commands.Add(new UICommand("Delete this Group", (contextMenuCmd) =>
    {
        SQLiteUtils slu = new SQLiteUtils(); …
Run Code Online (Sandbox Code Playgroud)

c# resharper lambda async-await windows-store-apps

199
推荐指数
3
解决办法
11万
查看次数

从HttpResponseMessage获取内容/消息

我正在尝试获取HttpResponseMessage的内容.它应该是:{"message":"Action '' does not exist!","success":false}但我不知道如何从HttpResponseMessage中获取它.

HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.GetAsync("http://****?action=");
txtBlock.Text = Convert.ToString(response); //wrong!
Run Code Online (Sandbox Code Playgroud)

在这种情况下,txtBlock将具有以下值:

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Vary: Accept-Encoding
  Keep-Alive: timeout=15, max=100
  Connection: Keep-Alive
  Date: Wed, 10 Apr 2013 20:46:37 GMT
  Server: Apache/2.2.16
  Server: (Debian)
  X-Powered-By: PHP/5.3.3-7+squeeze14
  Content-Length: 55
  Content-Type: text/html
}
Run Code Online (Sandbox Code Playgroud)

c# windows-8 windows-store-apps

155
推荐指数
6
解决办法
20万
查看次数

是否有可能等待事件而不是另一个异步方法?

在我的C#/ XAML metro应用程序中,有一个启动长时间运行过程的按钮.所以,按照建议,我使用async/await来确保UI线程不被阻止:

private async void Button_Click_1(object sender, RoutedEventArgs e) 
{
     await GetResults();
}

private async Task GetResults()
{ 
     // Do lot of complex stuff that takes a long time
     // (e.g. contact some web services)
  ...
}
Run Code Online (Sandbox Code Playgroud)

偶尔,GetResults内发生的事情需要额外的用户输入才能继续.为简单起见,假设用户只需单击"继续"按钮即可.

我的问题是:如何以等待点击另一个按钮等事件的方式暂停GetResults的执行?

这是实现我正在寻找的东西的一种丑陋方式:"继续"按钮的事件处理程序设置了一个标志......

private bool _continue = false;
private void buttonContinue_Click(object sender, RoutedEventArgs e)
{
    _continue = true;
}
Run Code Online (Sandbox Code Playgroud)

...和GetResults定期轮询它:

 buttonContinue.Visibility = Visibility.Visible;
 while (!_continue) await Task.Delay(100);  // poll _continue every 100ms
 buttonContinue.Visibility = Visibility.Collapsed;
Run Code Online (Sandbox Code Playgroud)

民意调查显然非常糟糕(忙碌的等待/浪费周期),我正在寻找基于事件的东西.

有任何想法吗?

顺便说一下,在这个简化的例子中,一个解决方案当然是将GetResults()分成两部分,从开始按钮调用第一部分,从继续按钮调用第二部分.实际上,GetResults中发生的事情更复杂,并且在执行中的不同点可能需要不同类型的用户输入.因此,将逻辑分解为多种方法将是非常重要的.

c# async-await microsoft-metro .net-4.5 windows-store-apps

146
推荐指数
5
解决办法
6万
查看次数

使用httpClient.GetAsync时添加标头

我在Windows商店应用程序项目中实现了其他同事与Apiary.io的api.

他们展示了我必须实现的方法的这个例子

var baseAddress = new Uri("https://private-a8014-xxxxxx.apiary-mock.com/");

using (var httpClient = new HttpClient{ BaseAddress = baseAddress })
{
    using (var response = await httpClient.GetAsync("user/list{?organizationId}"))
    {
        string responseData = await response.Content.ReadAsStringAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这个和其他一些方法中,我需要一个带有我之前获得的标记的标题

下面是一个邮递员(镀铬扩展)的图像,标题我正在谈论 在此输入图像描述

如何将该授权标头添加到请求中?

c# windows-runtime dotnet-httpclient windows-store-apps apiary.io

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

Thread.Sleep替代.NET for Windows Store

.NET for Windows Store应用程序似乎不支持Thread.Sleep.

例如,这个

System.Threading.Thread.Sleep(1000);
Run Code Online (Sandbox Code Playgroud)

将在针对任何.NET Framework(2.0,3.5,4.0,4.5)进行编译时进行编译,但在针对Windows应用商店应用程序(或者同时针对4.5和存储的可移植类库)中进行编译时不会编译.

System.Threading.Thread仍然存在,它只是没有Sleep方法.

我需要在我的应用程序中延迟几秒钟,是否有合适的替代品?

编辑为什么需要延迟:我的应用程序是一个游戏,延迟是让它看起来像计算机对手正在"思考"他的下一步行动.该方法已被异步调用(主线程未被阻止),我只想减慢响应时间.

.net c# windows-store windows-store-apps

97
推荐指数
4
解决办法
8万
查看次数

在Windows应用商店应用中获取CoreDispatcher的正确方法

我正在构建一个Windows应用商店应用,我有一些代码需要发布到UI线程.

为此,我想检索CoreDispatcher并使用它来发布代码.

似乎有几种方法可以这样做:

// First way
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher;

// Second way
Window.Current.Dispatcher;
Run Code Online (Sandbox Code Playgroud)

我想知道哪一个是正确的?或两者是否相同?

c# dispatcher async-await windows-runtime windows-store-apps

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

如何卸载另一个用户安装的应用程序?

当我尝试调试我的Windows 8应用程序并且已经在另一个用户帐户上安装了一个副本时,我一直在遇到这个问题:

DEP0700:应用程序注册失败.另一位用户已经安装了此应用程序的打包版本.未打包的版本无法取代此版本.冲突的包是{{{PackageName}}},它由CN = {{{Certificate Stuff}}}发布.(0x80073cf9)

有时我可以登录或要求其他人登录计算机并卸载应用程序.或者,我可以更改应用程序名称/ ID,但是一个并不总是可行而另一个是有风险的(我不想将已更改的应用程序ID签入源代码控制).

必须有一些方法来卸载它.也许是PowerShell脚本?

powershell windows-8 windows-runtime windows-store windows-store-apps

58
推荐指数
8
解决办法
7万
查看次数