C#でだいたいよく使う型ができてきました。でもよく忘れてまた検索してます。
pythonなど、他の言語をやっていて、時々windowsのスタンドアロンでアプリを作成したいときに、C#の構文とかを忘れたりします。よくprint()とか書いてしまします^^;
そんなときにすぐに思い出せるようにすごく個人的なメモです。もっと良いやり方や、そもそも冗長な処理をしているかもしれませんが、ご了承ください。
コンソールデバッグ
Console.WriteLine("文字列");
・文字列は+で結合可能。
現在時間を入れたコンソール出力をしたい場合は、
Console.WriteLine(DateTime.Now.ToString() + "文字列");
と、することで、何時何分何秒のログかを出力できる。
XAMLのTextBoxの値を処理で利用する
//TextBoxの文字列を表示する。
Console.WriteLine(TextBox.Text);
※TextBoxは任意の名前で、TextBoxプロパティの名前の部分。
入力値をint型に変換。
string texts = TextBox.Text;
int val = int.Parse(texts);
スレッドの利用
順次処理ではなく、処理のトリガーだけを投げて、そのあとの処理は並列的に行いたいときに利用しています。
1つのトリガー(関数の呼び出し、Func()などと使用)で、ループ回数分の処理を行い、すべてのタスクが完了した時点で非同期関数Func()が完了するような処理。
using System.Threading.Tasks;
private async Func()
{
var tasks = new List();
for (int l = 0; l < タスク数; l++) { var task = Task.Run(() =>
{
//タスクの処理
});
tasks.Add(task);
}
await Task.WhenAll(tasks);//すべてのタスクが完了するのを待つ。
}
タイマースレッドの利用
タイマースレッド、という言葉が正しいのか、わかりません^^;
GUIスレッドとは別の処理として一定時間間隔に何かの処理をしたいときに使います。タイマーにもいろいろ種類がありますが、使用しているのはサーバーベースタイマーというものです。
参考サイト:https://www.atmarkit.co.jp/ait/articles/0511/11/news119.html
↑サイトの、ラムダ式で簡潔に記述する、部分を使用させていただいてます。
private void SetupTimer()
{
// タイマの初期化と開始
Timer _timer = new Timer(1000);//1秒間隔指定
// ElapsedEventHandlerをラムダ式で定義
_timer.Elapsed += (s, e) => {
//タイマーの処理
};
_timer.Start();
this.Closing += (s, e) => {
// 画面が閉じられるときに、タイマを停止して破棄
_timer_bybit.Stop();
_timer_bybit.Dispose();
};
}
GUIスレッドへのデータ渡し
Invokeという別スレッドでの変数等データをGUIスレッドへ渡すテクを使います。
上記のようなタイマースレッドや、並列にした処理中の値をGUIに表示したいときなどによく使います。
よくエラーデータをGUIのラベルなどに表示します。そのときは、次の関数を定義しておきます。
private void Error_Disp(string str)
{
//Invoke処理でGUIスレッドへも変数を渡すことができる。
this.Dispatcher.Invoke((Action)(() =>
{
Label.Content = str;//ラベルに文字列を渡してGUI表示
}));
}
上記関数を定義しておけば、並列処理をしているスレッドの中で
Error_Disp("こんなエラー");
とすることで、文字列をInvokeでGUIのオブジェクトに渡すことができます。
Printみたいに使えて便利です。
データのファイル出力
ファイルのオープン、クローズ等、明示的に書くのは面倒だといつも思います。
File.AppendAllText(@"test.txt", DateTime.Now.ToString() + "," + "データ" + "\n");
これを記述すると、指定のファイル(test.txt debagモードで動作しているときは、プロジェクトのbinフォルダのdebugの直下に作成される。)にどんどん追加していってくれてとりあえずファイル出力の時に便利です。
上記データ形式は、「時間+カンマ+データ」で、一行毎に改行を入れてテキストエディタで開いたときに見やすくしています。
カンマ区切りのため、csvとしてpythonなどでもデータ加工がしやすくて重宝しています。
以上、未来の自分にむけてつぶやきです^^;