デザイナーを使用してイベント ハンドラーを作成できるよ
C#で時間のかかる処理でプログレスバー表示させてキャンセル受け付ける処理実装
Progress という名前のフォームを作って、
プログレスバー(progressBar1) と キャンセルボタン(button1)を貼り付ける。
コードは以下のように。
処理するのは文字列返す関数としている。
Progress.cs
// SetTitle() / SetFunction() で処理設定して ShowDialog()で実行 // 処理関数の中で p.Report(100); したら処理完了と判断する // その後 GetResult() でタスクで処理した結果の文字列受け取る // キャンセル時には"キャンセル"が帰る public partial class Progress : Form { CancellationTokenSource cancelTokensource; // キャンセル判定用 string m_result; // 返り値 // 初期化 public Progress() { InitializeComponent(); } // ウインドウタイトル設定 public void SetTitle(string aTitle) { this.Text = aTitle; } // 処理関数設定 public delegate string Func(IProgress<int> p, CancellationToken cancelToken); // デリゲート宣言 Func m_Func; public void SetFunction(Func aFunc) { m_Func = aFunc; } // 処理開始イベント Task<string> m_Task; private void Progress_Shown(object sender, EventArgs e) { cancelTokensource = new CancellationTokenSource(); var cToken = cancelTokensource.Token; var p = new Progress<int>(ShowProgress); m_Task = Task.Run(() => m_Func(p, cToken)); } // キャンセルボタンクリック private void button1_Click(object sender, EventArgs e) { this.button1.Enabled = false; // もう一回は押せなくする if (cancelTokensource != null) { m_result = "キャンセル"; cancelTokensource.Cancel();//キャンセルを発行 m_Task.Wait(); this.Close(); } } //表示更新用 private void ShowProgress(int percent) { this.progressBar1.Value = percent; // 100%で終了と判断する if( percent == 100 ) { m_Task.Wait(); m_result = m_Task.Result; this.Close(); } } // 返り値取得 public string GetResult() { return m_result; } }
こっちはProgressを使って重い処理を実行する呼び出し側
string 重い処理(IProgress<int> p, CancellationToken cancelToken){ // 重い処理する //... return "返り値"; } private void button1_Click(object sender, EventArgs e) Progress progress = new Progress(); progress.SetTitle("重い処理中"); progress.SetFunction(重い処理); progress.ShowDialog(); string result = progress.GetResult(); if (result == "キャンセル") { MessageBox.Show("キャンセルしました。"); } }
ビットコインの過去データのありか
巨大データベースです。64bitExcelでも開けないサイズです。歩み足のデータのようです。
gz形式で圧縮されていますが、各取引所のデータがcsv形式で取得できます。
bitflyer,conincheck,Zaifとかあります。
SeleniumでEdgeを利用(Seleniumのコンソールを隠す版)
NuGetでSelenium.SupportとSelenium.WebDriverをインストールして
実行ファイルと同じフォルダにMicrosoftWebDriver.exeがある前提。
MicrosoftWebDriver.exeはこちらからDL。
var service = EdgeDriverService.CreateDefaultService(); service.HideCommandPromptWindow = true; EventFiringWebDriver driver = new EventFiringWebDriver(new EdgeDriver(service)); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5); driver.Navigate().GoToUrl(”http://hoge.com”);
C# で AES暗号 (共通鍵暗号) を 利用 する 方法 256bit
using System; using System.Security.Cryptography; public void CreateKey1(out string iv, out string key) { var BLOCK_SIZE = 128; // 128bit 固定 var KEY_SIZE = 256; // 128/192/256bit から選択 // AES暗号サービスを生成 var csp = new AesCryptoServiceProvider(); csp.BlockSize = BLOCK_SIZE; csp.KeySize = KEY_SIZE; csp.Mode = CipherMode.CBC; csp.Padding = PaddingMode.PKCS7; // IV および 鍵 を自動生成 csp.GenerateIV(); csp.GenerateKey(); // 鍵を出力; string iv = Convert.ToBase64String(csp.IV); string key = Convert.ToBase64String(csp.Key); }
C#で文字列のSHA-256を求める
byte[] input = Encoding.ASCII.GetBytes("hogehogehoge"); SHA256 sha = new SHA256CryptoServiceProvider(); byte[] hash_sha256 = sha.ComputeHash(input);
C# httpclientでOAuth 2.0 認証(クライアントクレデンシャルグラント) アクセストークンもらう
string client_id = "hogehoge"; // 提供される情報 string client_secret = "hogehoge_secret"; // HttpClient http_client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(); request.Method = HttpMethod.Post; request.RequestUri = new Uri("https://auth-api.api.hogehoge.com/oauth2/"); // クライアントクレデンシャルグラントで使用するエンドポイント // Basic認証 request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(client_id + ":" + client_secret))); // パラメータ var parameters = new Dictionary<string, string>() { { "grant_type", "client_credentials" }, { "param", "hoge" }, }; request.Content = new FormUrlEncodedContent(parameters); var response = http_client.SendAsync(request); response.Wait(); string result = response.Result .Content.ReadAsStringAsync().Result;
Excelで数値&文字のセルから数字のみを抽出する関数
ややこしいけど関数でできる
例:A1 = '50円'の場合 50と出力
=LOOKUP(10^17,LEFT(A1,COLUMN($1:$1))*1) ;A1から数字のみ"50"を抽出
詳しい理屈はネタ元へ