Skip to content

Instantly share code, notes, and snippets.

@qwerty2501
qwerty2501 / gist:2943430
Created June 17, 2012 04:40
C#でのニコ動ログイン(動く)
public bool DeepLogin()
{
bool login = false;//ログイン成否
HttpWebRequest req = WebRequest.CreateHttp(new Uri(deepLoginUrl, UriKind.Absolute));
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.CookieContainer = App.ViewModel.UserSetting.cc;
using (StreamWriter sw = new StreamWriter(req.GetRequestStreamAsync().GetAwaiter().GetResult()))
{
//ライブラリ側のコード
public class DeadlockSample
{
public static async Task DoAsync()
{
//規定のawaitだとライブラリユーザにWaitされた場合デッドロックになる可能性がある
await HeavyWorkAsync();
}
}
//ライブラリ側のコード
public static async Task DoAsync()
{
//デッドロックを回避するにはConfigureAwait(false)メソッドを呼び出す
await HeavyWorkAsync().ConfigureAwait(false);
}
/// <summary>
/// GUIアプリケーションのコードビハインド
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
public class AsyncClass
{
//この通知によってライブラリユーザはGUIを更新することが高いと予想される
public event Action SomeEventHandler;
public async Task DoAsync()
{
//ここまでGUIスレッドで実行されているとする
//.ConfigureAwait(false)でUIスレッドに戻さない
public class AsyncClass
{
//この通知によってライブラリユーザはUIを更新することが高いと予想される
public event Action SomeEventHandler;
public async Task DoAsync()
{
//ここまでUIスレッドで実行されているとする
//UIスレッドの同期コンテキストをキャッシュする
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
//ConfigureAwait(false)でUIスレッドに戻さない
await Task.Delay(5).ConfigureAwait(false);
var asyncObject = new AsyncClass();
asyncObject.SomeEventHandler += async()=>
{
@qwerty2501
qwerty2501 / CsspCode1
Created October 15, 2014 12:33
CSharp for system programing code1
void Foo(int x)
requires Range.IsValid(x, ...)
{
....
@qwerty2501
qwerty2501 / CsspFigure2
Created October 15, 2014 12:40
CsspFigure2
void Foo(int x)
{
if (!Range.IsValid(x, ...))
throw new ArgumentOutOfRangeException("x");
...
@qwerty2501
qwerty2501 / gist:11e5bfd1cc368c19ddf693ffd1afe132
Created September 7, 2016 14:11
Xamarin.Formsバッドノウハウ ListView編
・Xamarin.FormsのUWP版ListViewだと仮想化が有効にならない
UWPの仕様上常にListViewは仮想表示されることになっているが、実際には仮想化されず追加したぶんだけListViewItemが生成される。
原因について恐らくではあるが、Xamarin.FormsのUWP版ListViewの実装でUWPのListViewItemのMinHeightを0に設定されているのが原因。
UWPの挙動として、ListViewItemの高さを算出できなかった時にMinheightをもとに仮想表示に必要な高さを求めるようになっているらしく、
仮に1万個追加されたとしてもMinHeightが0だと高さ0のItemが追加されたとみなされるため全て表示しようとする。そのためListViewItemが大量に生成される。
この現象はXamarin.FormsのDatatemplate内のHeightRequestを設定してもなぜか解決しなかった。
この現象を解決するにはUWPのプロジェクト内にあるAppクラスのリソースにFormsListViewItemをKeyとしたStyleリソースにMinHeightに0以外の数値を設定するSetterを定義するか、
もしくはMinHeightのSetterを定義しないことで解決する。(MinHeightは規定値の場合0になるがなぜかListViewItemは大量に生成されない)
ただし、この行為は元々Xamarin.FormsにあるFormsListViewItemリソースを上書きする行為なので、注意すること。