はじめに
業務でC#を使っていた際に詰まったところや忘れがちな所を備忘録として書きました。
- スレッドやタスクからフォームを変更する場合
スレッドやタスクからフォームを操作するとエラーが発生する。
そのため、Invokeを使用する。
例:テキストボックス(textBox)の名称を変更する場合
sample.cs
//フォーム上のテキストをChangedに変更this.Invoke(newAction<string>(this.TextChange),"Changed");//フォーム上のテキストボックスを変更する関数privatevoidTextChange(stringtext){this.textBox.Text=text;}
Invokeは引数の有無で以下のように使い分ける。
//引数なしthis.Invoke(newAction(関数));//引数ありthis.Invoke(newAction<引数の型名>(関数),引数);
引数がない場合ならラムダ式を使用して、以下のように書くと便利
//引数なしthis.Invoke(newAction(()=>{処理}));
- 待機をする方法
例:100ミリ秒を待機する。
System.Threading.Thread.Sleep(100)
usingを使用する場合はusing System.Threading;を宣言し、
以下のようにする。
//100ミリ秒待機Thread.Sleep(100)
- Consoleの入力
基本的にフォームを使うので、すぐに忘れてしまう。
//文字stringhoge1=Console.Read();//1行分stringhoge2=Console.ReadLine();
- Consoleの出力
入力と同じですぐに忘れてしまう
stringhoge="test";//改行なし出力Console.Write(hoge);//改行あり出力Console.WriteLine(hoge);
- 「」や()などで括る場合など
リソースに定義していても使えるので、便利
stringhoge="test";Console.WriteLine(string.Format("「{0}」",test);
出力結果:「test」
- 共用体を使う方法
CのunionをC#でも使えるみたいなので。
同じメモリ領域を複数の型が共有出来るので、とても便利。
usingSystem.Runtime.InteropServices;[StructLayout(LayoutKind.Explicit)]publicstructUnionData{//0バイト目[FieldOffset(0)]publicbytezero;//1バイト目[FieldOffset(1)]publicbyteone;//2バイト目[FieldOffset(2)]publicbytetwo;//3バイト目[FieldOffset(3)]publicbytethree;//float型[FieldOffset(0)]publicfloatfloatData;//int型[FieldOffset(0)]publicintintData;}
共用体を使用したサンプル
//共用体の宣言
UnionData data = new UnionData();
//int型にのみ値を代入
data.intData = 1094861636;
//それぞれの値を出力
//0バイト目
Console.WriteLine(Convert.ToChar(data.zero));
//1バイト目
Console.WriteLine(Convert.ToChar(data.one));
//2バイト目
Console.WriteLine(Convert.ToChar(data.two));
//3バイト目
Console.WriteLine(Convert.ToChar(data.three));
//int型
Console.WriteLine(string.Format("int = {0:d}",data.intData));
//float型
Console.WriteLine(string.Format("float = {0:0.000000}", data.floatData));
おわりに
まだまだ、わからないことや知らないことが多いので、勉強しないといけないです…。
データベースとかも勉強したい…