Skip to content

Instantly share code, notes, and snippets.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Threading;
namespace WpfApplication1
{
public class AsyncObservableCollection<T> : ObservableCollection<T>
{
private readonly SynchronizationContext _synchronizationContext = SynchronizationContext.Current;
public class Deferral : IDisposable
{
private TaskCompletionSource<object> _completionSource = new TaskCompletionSource<object>();
~Deferral()
{
Dispose(false);
}
public void Dispose()
@thomaslevesque
thomaslevesque / AsyncStackTrace.cs
Created August 16, 2013 13:42
Extension method to add "logical" stack trace to async methods, with usage example. Copy/paste in Linqpad and add the following namespaces: - System.Runtime.CompilerServices - System.Threading.Tasks
async void Main()
{
try
{
await FooAsync().AsyncTrace();
}
catch(Exception ex)
{
ex.FullTrace().Dump();
}
@thomaslevesque
thomaslevesque / AlternateDataStream.cs
Created August 12, 2013 13:00
Class that gives access to NTFS Alternate Data Streams
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace ADS
{
public static class AlternateDataStream
{
public static FileStream Open(string path, string streamName, FileMode mode)
{
@thomaslevesque
thomaslevesque / Distinct2.cs
Last active December 20, 2015 09:19
Distinct overload with 2 type parameters, to solve the problem shown on Eric Lippert's blog (http://ericlippert.com/2013/07/29/a-contravariance-conundrum/)
public static IEnumerable<T> Distinct<T, U>(this IEnumerable<T> source, IEqualityComparer<U> comparer)
where T : U
{
IEqualityComparer<T> comparer2 = (IEqualityComparer<T>)comparer;
return Enumerable.Distinct<T>(source, comparer2);
}
@thomaslevesque
thomaslevesque / gist:6100447
Created July 28, 2013 22:05
Proof that enum types are mutable
var field = typeof(DayOfWeek).GetField("value__");
var d = DayOfWeek.Monday;
Console.WriteLine (d);
TypedReference r = __makeref(d);
field.SetValueDirect(r, 4);
Console.WriteLine (d);
async void Main()
{
Console.WriteLine ("Before Using");
await Async.Using(new Test(), t =>
{
Console.WriteLine ("In Using body");
throw new Exception("Oops");
});
Console.WriteLine ("After Using");
}
@thomaslevesque
thomaslevesque / DataProtectionExtensions.cs
Created May 26, 2013 14:40
Simple string encryption using Data Protection API in WinRT
using System;
using System.Threading.Tasks;
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.DataProtection;
namespace App1
{
public static class DataProtectionExtensions
{
public static async Task<string> ProtectAsync(this string clearText, string scope = "LOCAL=user")
@thomaslevesque
thomaslevesque / Strings.tt
Last active February 5, 2021 15:06
Generates a strongly typed wrapper for a resource file, compatible with the Portable Class Library. Just drop this T4 template in your project, with the same base name as a .resx file in the same folder (e.g. Strings.tt for Strings.resx)
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="System.Xml.Linq" #>
<#@ assembly name="EnvDTE" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Globalization" #>
<#@ import namespace="System.Collections.Generic" #>
@thomaslevesque
thomaslevesque / DelegateCommand.cs
Created April 17, 2013 23:14
Basic DelegateCommand implementation
using System;
using System.Windows.Input;
namespace QuestionableContent.Input
{
public class DelegateCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;