using System.Text.Json.Serialization;
#nullable enable
namespace ConsoleApp
{
public struct Optional<T>
{
private T? _value;
public Optional(T? value)
{
IsNewValue = true;
_value = value;
}
/// <summary>
/// Возвращает true, если в свойстве <see cref="Value"/>
/// находится новое значение, даже если это null.
/// </summary>
[JsonPropertyName("isNewValue")]
public bool IsNewValue { get; set; }
[JsonPropertyName("value")]
public T? Value
{
get => _value;
set
{
_value = value;
IsNewValue = true;
}
}
public override string ToString()
{
return $"{nameof(Value)}: {(Value is null ? "null" : Value.ToString())}, " +
$"{nameof(IsNewValue)}: {IsNewValue}";
}
public static implicit operator Optional<T>(T? value) => new(value);
}
}
using System.Text.Json.Serialization;
#nullable enable
namespace ConsoleApp
{
public class Message
{
[JsonPropertyName("id")]
public long Id { get; set; }
[JsonPropertyName("title")]
public string Title { get; set; } = default!;
[JsonPropertyName("description")]
public Optional<string> Description { get; set; }
[JsonPropertyName("serialNumber")]
public Optional<string> SerialNumber { get; set; }
[JsonPropertyName("owner")]
public Optional<string> Owner { get; set; }
}
}
using System;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
#nullable enable
namespace ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var message = new Message
{
Id = 100,
Title = "Название",
Description = "Описание",
SerialNumber = null
};
var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.Cyrillic),
WriteIndented = true
};
try
{
string json = JsonSerializer.Serialize(message, options);
Console.WriteLine(json);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
}
}
WinUI развивается, дополняется элементами управления и т.д. независимо от новых версий Windows, как не было в случае с UWP. Означает, что теперь можно дождаться исправления бага и не повышать минимальную версию Windows (стр. 39); В UWP проекте нужно было повышать минимальную версию и отказываться от части своей аудитории, которая не обновляет винду.
Дальше больше не планируется развивать UWP, а только выпускать важные обновления безопасности. Все новые возможности будут разрабатываться только для WinUI (стр. 43)
Подскажите, почему Task.Delay(1000); не останавливает поток?
public partial class SmallWindow : Window
{
public SmallWindow()
{
InitializeComponent();
// Запускаем обновление временни на малом табло
StartRefreshDateTime();
}
/// <summary>
/// Запускаем обновление временни на малом табло
/// </summary>
private async void StartRefreshDateTime()
{
await Task.Factory.StartNew(async () =>
{
while (true)
{
Dispatcher.Invoke(() =>
{
ClockBox.Text = DateTime.Now.ToString("HH:mm");
});
await Task.Delay(1000);
}
}, TaskCreationOptions.LongRunning);
}
}