我的图像宽度为888像素,高度为592像素,宽高比为3:2.
由于BitmapDecoder.PixelWidth和BitmapDecoder.PixelHeight都是uint
(无符号整数),decoder
下面是BitmapDecoder对象,因此下面会产生1的错误值,因为整数计算/截断.
double aspectRatio = decoder.PixelWidth / decoder.PixelHeight;
下面给出了1.5的预期正确值,但Visual Studio说"Cast是多余的",但为什么呢?
double aspectRatio = (double)decoder.PixelWidth / (double)decoder.PixelHeight;
以下效果很好,并且使用了很长一段时间。
Uri requestUri = new Uri("http://somewebsite.com/api/Images");
var client = new HttpClient();
var response = await client.GetAsync(requestUri);
StorageFolder folder = ApplicationData.Current.LocalFolder;
if (response.IsSuccessStatusCode)
{
string responseBody = await response.Content.ReadAsStringAsync();
List<string> myList = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<List<string>>(responseBody));
// more logic here
}
Run Code Online (Sandbox Code Playgroud)
该代码await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<List<string>>(responseBody));
看起来可读性较差,想知道是否有简化的等效代码。
您能否建议一个更好的替代方案来List<string>
从 Web Api 获取 HTTP 响应内容?
我想要一个可以通过鼠标和触摸滑动水平滚动的单行GridView.GridView将通过绑定显示图像,以便从图像阵列中选择单个图像.
除了水平滚动不起作用外,一切正常(装订,图像选择等).XAML代码如下所示.
我错过了什么?
<GridView x:Name="IconGridView"
Grid.Row="0"
Margin="8,12"
DataContext="{x:Bind IconManagerObj}"
DoubleTapped="{x:Bind IconGridView_DoubleTapped}"
IsItemClickEnabled="True"
IsSwipeEnabled="True"
ItemsSource="{Binding Path=IconImageInfo}"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.VerticalScrollMode="Disabled"
SelectionMode="Single"
Tapped="{x:Bind IconGridView_Tapped}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Horizontal" />
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Margin="4,8"
HorizontalAlignment="Center"
BorderBrush="{ThemeResource SubtleBlueBrush}"
BorderThickness="1">
<Image Width="150" Source="{Binding IconImage}Stretch="Uniform"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
Run Code Online (Sandbox Code Playgroud) 我可能不太了解?? 操作员,但遇到了我无法解释的设计缺陷。
比较以下两个属性,唯一的区别是如何初始化:第一个显式初始化,而第二个与?操作员(或者我在这里做错了吗?)。
如果我同时使用两个属性运行数据初始化,则将根据预期填充基于第一个属性的集合,而第二个具有??的集合 运算符永远不会填充,并且在集合中提供0个元素。
根据我的假设,这肯定是错误的。这里有什么缺点?
PS请忽略Set方法,该方法将在基类中实现INotifyPropertyChanged,并且与该问题无关(仅限于初始化类型)。
//属性版本1
private ObservableCollection<UserName> _userNameColl = new ObservableCollection<UserName>();
public ObservableCollection<UserName> UserNameColl
{
get { return _userNameColl; }
set { Set(ref _userNameColl, value); }
}
Run Code Online (Sandbox Code Playgroud)
//属性版本2
private ObservableCollection<UserName> _userNameColl;
public ObservableCollection<UserName> UserNameColl
{
get { return _userNameColl ?? new ObservableCollection<UserName>(); }
set { Set(ref _userNameColl, value); }
}
Run Code Online (Sandbox Code Playgroud)
//一个用于创建对象集合的简单类
public class UserName
{
public string Name { get; set; }
public int Age { get; set; }
public …
Run Code Online (Sandbox Code Playgroud) 在同步编程中(在async/await
到达现场之前),我很清楚如何或为什么发生跨线程异常.如果我启动了一个后台线程来完成一些繁重的任务,以便卸载UI线程并使其响应,我知道如何从后台线程访问UI线程.如果有疑问,我甚至可以检查给定代码执行的线程.
使用异步/等待异步编程,我发现什么是明确的线程识别模糊和模糊(甚至在调试中调用堆栈根据众多等待任务跳转到整个地方).
我试图找出的是一种路线图,可以帮助我识别沿着颠簸的异步/等待曲折的跨线程危险区域/陷阱(原谅隐喻).
在异步编程方面,我究竟应该注意什么来避免跨线程异常?这些可以制成某种清单吗?
以下工作正常,可以从指定目录中获取*.png和*.jpg文件列表,并按文件名排序.
DirectoryInfo di = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/Images/"));
List<string> fileNames = di.GetFiles("*.*")
.Where(f => f.Name.EndsWith(".png") || f.Name.EndsWith(".jpg"))
.OrderBy(f => f.Name).Select(f => f.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
我想通过首先使用文件扩展名然后通过文件名进行排序来增强上述功能,因此:
DirectoryInfo di = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/Images/"));
List<string> fileNames = di.GetFiles("*.*")
.Where(f => f.Name.EndsWith(".png") || f.Name.EndsWith(".jpg"))
.OrderBy(f => new {f.Extension, f.Name}).Select(f => f.Name).ToList();
Run Code Online (Sandbox Code Playgroud)
这会标记运行时错误:At least one object must implement IComparable
并怀疑OrderBy new {f.Extension, f.Name}
可能不正确?
我怎样才能解决这个问题?
我已经设法在VS2015上创建一个xUnit项目来对UWP应用进行单元测试.这里有关于stackoverflow这个问题的背景知识,它给出了这个问题的一些背景.
我可以编译并运行测试,但是当我引用要测试的项目时,会出现以下错误.
------ Run test started ------
Updating the layout...
Checking whether required frameworks are installed...
Registering the application to run from layout...
Deployment complete (1857ms). Full package name: "8f4533e5-fec8-415b-94ab-6bce6b37374f_1.0.0.0_x86__5gyrq6psz227t"
A user callback threw an exception. Check the exception stack and inner exception to determine the callback that failed.
========== Run test finished: 0 run (0:00:04.3378913) ==========
Run Code Online (Sandbox Code Playgroud)
我理解引用的项目(将进行单元测试)导致a user callback threw an exception
但我没有看到调试此错误的明显方法.执行模式看起来不像可以使用断点检查的普通调试.
有谁知道如何深入研究并找出导致a user callback threw an exception
错误的原因?要测试的应用程序项目没有错误,并且可以自行运行.
我知道WinRT中缺少System.Data命名空间,因此我希望从未提出过基于DataTable或DataSet for WinRT的编程.现在我在UWP中看到了System.Data(和System.Data.Common)命名空间,但是永远找不到DataTable或DataSet.或者,我错过了什么,或需要一个不同的命名空间?
更具体地说,如果我以前使用过System.Data.DataTable和Microsoft.Office.Interop.Excel.DataTable,那么将旧代码迁移到UWP需要做什么?
这是这个问题的后续。我按照此处描述的步骤进行操作,示例测试按预期工作。这是我第一次接触这个工作示例,但是等待真正的工作设置,这就是我遇到麻烦的地方。
作为测试我的应用程序的下一步,我使用“添加引用...”将我的 UWP 应用程序项目添加到 xUnit 测试项目。现在,在引用我的项目后,当我运行测试(在“测试资源管理器”窗格 VS2015 中运行全部)时,出现以下错误:
Error Payload contains two or more files with the same destination path 'Assets\SplashScreen.scale-200.png'. Source files:
...\Projects\Sample\SampleUnitTest\Assets\SplashScreen.scale-200.png
...\Projects\Sample\Sample\Assets\SplashScreen.scale-200.png SampleUnitTest
还有两个错误,与上面完全相同,但涉及Square150x150Logo.scale-200.png
图像Square44x44Logo.targetsize-24_altform-unplated.png
文件。
我能理解这些错误的含义;正在测试的应用程序和测试项目都生成用于相同输出的视觉资源(启动屏幕图像、徽标、任务栏图标等),但需要这些资源来注册应用程序并运行(在本地计算机上)我的情况)。我从来没有遇到过两个项目输出相同的视觉资源这样有争议的问题,希望有人知道如何解决这个问题。如果我将项目更改为类项目,单元测试将不起作用,因此这不是一个选项。
您如何处理 xUnit 测试项目和正在测试的项目之间的争议情况(关于视觉资源)?
我仍在掌握异步编程的过程中,并且对如何修改以下内容有些困惑:
基本虚拟方法:
public virtual async Task OnSuspendingAsync(object s, SuspendingEventArgs e)
{
// do some housekeeping actions upon suspending in the base class
await Task.Yield();
}
Run Code Online (Sandbox Code Playgroud)
覆盖方法:
public override Task OnSuspendingAsync(object s, SuspendingEventArgs e)
{
// do some housekeeping actions on exiting/suspending
return base.OnSuspendingAsync(s, e);
}
Run Code Online (Sandbox Code Playgroud)
问题:
现在,如果我在重写的方法中使用 awaitable(几乎不可避免),我需要通过添加关键字来更改public override Task
为public override async Task
,async
如下面的真实示例所示。
public override async Task OnSuspendingAsync(object s, SuspendingEventArgs e)
{
try
{
// tidy up app temporary folder on exit
await ApplicationData.Current.ClearAsync(ApplicationDataLocality.Temporary); …
Run Code Online (Sandbox Code Playgroud) c# ×10
uwp ×6
asynchronous ×2
xunit.net ×2
.net ×1
async-await ×1
datatable ×1
dnx ×1
gridview ×1
json.net ×1
linq ×1
namespaces ×1
unit-testing ×1
xaml ×1