概要
WindowsフォームアプリケーションでUnityのUpdate関数のような毎フレーム自動更新する環境を実装してみました
また,フォームアプリケーションでコンソールを使う方法も今回調査してわかったので共有
環境
windows10
Visual Studio 2019
実装
プロジェクトの作成までは過去記事を参照してください
コンソールをフォームアプリケーションで実装する
1.プロジェクトを作成したらまずform1を右クリックして,コードの表示を選択してコードを表示する
2.以下のコードを入力
publicpartialclassForm1:Form{[System.Runtime.InteropServices.DllImport("kernel32.dll")]privatestaticexternboolAllocConsole();publicForm1(){InitializeComponent();AllocConsole();Console.WriteLine("hogehoge");}}
実行すると,フォームとコンソールウィンドウの2つが表示され,Console.WriteLineが使用可能になる
Image may be NSFW.
Clik here to view.
Update関数の実装
Form1_Activatedイベントを追加し,そこでWhile(true)を回す方法もあるが,邪魔になりそうなので今回はbackgroundWorkerを使用し,個別にUpdate関数を実装することにする
1.ツールボックスから「backgroundWorker」をform1上にD&Dし,ダブルクリックしてbackgroundWorker1_DoWorkイベントを追加する
2.backgroundWorker1_DoWorkに以下のコードを入力
privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){while(!backgroundWorker1.CancellationPending){Console.WriteLine("hoge");}}
3.BackgroundWorkerのプロパティタブで下図のように「WorkerReportsProgress」「WorkerSupportsCancellation」の2つをfalseからtrueに変更する
Image may be NSFW.
Clik here to view.
4.FormClosingイベントを追加し,下記コードを追加(詳しいやり方は過去記事参照)
privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){//スレッドの終了を待機backgroundWorker1.CancelAsync();Application.DoEvents();}
5.Form1関数に
backgroundWorker1.RunWorkerAsync();
を書き加えて完成
一応namespace以下のコード全体を載せておきます
publicpartialclassForm1:Form{[System.Runtime.InteropServices.DllImport("kernel32.dll")]privatestaticexternboolAllocConsole();publicForm1(){InitializeComponent();AllocConsole();backgroundWorker1.RunWorkerAsync();}privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){while(!backgroundWorker1.CancellationPending){Console.WriteLine("hoge");}}privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){//スレッドの終了を待機backgroundWorker1.CancelAsync();Application.DoEvents();}}
実行結果
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge
...
失礼しました
これでUnityっぽい感覚を少しでも得られるかも