C#

C#から、PowerShellのコマンドを実行する

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと C#のコードから、PowerShellのコマンドを実行して、その戻り値を受け取りたい。 やりかた Process.Start() で、 PowerShell.exe を実行し、そのArgumentに、PowerShellのコマンドと引数を…

リモートのPCに、VisualStudioでビルドした成果物(.exeなど)をコピーする手間を省く

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 自分の実装作業用PCでビルドして、それを別の実環境PCにコピーして、そっちで動かしたいときがある。 実環境PCに、リモートデバッグで接続してVisualStudioでデバッグする場合は、以前調…

複数の名前付きパイプサーバーに、1つのパイプクライアントから同じデータを送る

C#

パイプ関連記事 もくじ https://tera1707.com/entry/2022/02/06/144447#Pipe やりたいこと 以前の記事で、名前付きパイプでプロセス間通信のやり方を調べた。 そのパイプの記事では、1つのパイプサーバーに対して、1つのパイプクライアントから文字列を送る…

IEquatable<T>を実装する

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 図のようにデータを保存するためのクラスがあって、 その親データクラスの、新しいデータと古いデータがあったとして、 それらを比較したいときに、 親クラスの中にある子データクラス1と…

Task.WhenAllで、複数タスクのうちどれか1つが終わるまで待つ & 例外処理

C#

もくじ https://tera1707.com/entry/2022/02/06/144447#Task やりたいこと 複数のTaskの完了を待つTask.WhenAll()を使って、複数の処理を、複数のタスク(スレッド)で行わせた後、全部のタスクが終わるのを待つ、ということはよくやるのだが、今回、どれか一…

C++のCOMのコードをC#にもっていきたいときに、interfaceや構造体等の定義の参考にするもの

もくじ https://tera1707.com/entry/2022/02/06/144447#COM やりたいこと COMでなにかをしないといけないときに、自分は C++でまずCOMを使ってやりたいことができるか試す それが出来たら、C#に直す 必要なinterfaceや構造体などを、C++のヘッダーを見ながら…

PCにマイクやスピーカー(オーディオデバイス)を抜きさししたときのイベントを取る(C#版)

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、C++で、オーディオデバイス(マイクとかスピーカーとか)が接続されたときのイベントを拾うということをした。 その時のコードを、C++からC#にしたい。 実験コード COMの練…

構造体の「StructLayout」とは何をするものか?

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと COMについて勉強していたときに、 [StructLayout(LayoutKind.Explicit)] public struct PROPVARIANT { [FieldOffset(0)] public ushort vt; [FieldOffset(2)] public ushort wReserved1; …

SensorManagerで、C++とC#でCOMを使う練習をする その2

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、COMをC++とC#から使う練習をしたつもりだったが、再度COMを使うことになったときに、全然わかってなかったことに気づいてしまったので、もうちょっと頑張ってCOMを使う練習…

TaskにConfigureAwait(false)を付けると、それ以降の処理はそれ以前のスレッドとは別のスレッドで行われることになる

C#

やりたいこと Taskでawaitしている個所に.ConfigureAwait(false)を付けると、その後の処理で、アプリが落ちたりすることがある。なんでなのか?調べたい。 わかったこと .ConfigureAwait(false)を付けたときとつけてないときで、処理が行われるスレッドが違…

実行中のプロセス自身のパスをとる

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 実行してるexe自身のフルパス、もしくはそれが保存されてるフォルダのパスを取りたい。 サンプルコード // フォルダ Console.WriteLine(Environment.CurrentDirectory); Console.WriteLin…

Taskを調べてると頻繁に出てくる「コンテキスト」とは何か?

C#

やりたいこと Taskとか非同期処理を調べていると、あちこちに「コンテキスト」「同期コンテキスト」「非同期コンテキスト」という言葉が出てくる。 これが、調べても調べても何のことを言っているのかわからない。 なんとなく、「コンテキスト ≒ スレッド」…

null許容(null許容値型/null許容参照型)についてのメモ

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと タイトルとは別のしらべものをしているときに、 null許容について知らないことがいろいろわかった気がしたので、理解したかどうかはおいておいて、忘れたくないものを取り急ぎメモ。 別の…

型パラメーターの制約条件(where T : 〇〇)

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと あるとき、ジェネリクスで、 T型の戻り値をもつメソッドを引数にとって、 引数で受けたメソッドを実行する。 実行したときに例外なく実行出来たら、そのまま引数で受けたメソッドが返した…

C#コードから起動したプロセスの標準入力に、なにか入力する(Y/Nみたいなのを自動で入力する)

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事でやったようなのを、C#から起動したコマンドでもやりたい。 コマンドを起動した後に、YesかNoかを聞かれる場合に、自動で「Y」と入力したことにしたい。 サンプルコード 実験…

コンソールアプリの、標準出力/標準エラー出力への出力を受け取る(非同期版)

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、コンソールアプリの標準出力を受け取る方法を調べた。 今回は、それを非同期で出来るというのを見たので、やり方をメモしておく。 サンプルコード 実験用に、標準出力と標…

コンソールアプリの、標準出力への出力を受け取る

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 別のコンソールアプリのexeを実行したときに、 戻り値ではなくて、コマンドプロンプトで実行したときに黒窓に出てくるアレを受け取りたい。 例えば、ipconfigのコマンドだと、下記のよう…

別のexeを、自分のアプリ(exe)に取り込んで、好きな時に吐き出して実行する

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 自分が作ったプログラムのexeと同じ階層に、あらかじめ指定のファイルを配置しておきたい場合に、 下図のように、ソリューションエクスプローラーにファイルを追加して、そのプロパティで…

インターフェース・継承周りの実験②

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 前回記事の続き。 コードと資料 コード https://github.com/tera1707/InterfaceJikken 資料 https://github.com/tera1707/Siryou/blob/master/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%8…

インターフェース・継承周りの実験①

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 仕事で読むコードに「interfaceの明示的実装」が出てきたが、 以前理解したはずなのに、またアレ?となった。 もう忘れないようにまとめておきたい。 前提 VisualStudio2022 .NET6 コード…

deps.jsonファイルは何者か?消していいか?

やりたいこと .net6環境で、自分のアプリ(exe)やライブラリ(dll)をビルドすると、 xxxxx.deps.jsonというファイルができてくる。 これは何のファイルなのか?もしいらないファイルなら消したいが、消してよいのか?を調べてみた。 結論 ライブラリ(dll)ビル…

リトライ処理をまとめる

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと アプリを作る中で、 「あるメソッドを実行したときに、例外がスローされたら数回リトライしたい」 「数回リトライしてもまだ例外スローするならあきらめて処理継続したい」 というような…

名前付きパイプでプロセス間の双方向通信を行う(最終版)

C#

パイプ関連記事 もくじ https://tera1707.com/entry/2022/02/06/144447#Pipe やりたいこと 以前の記事で、パイプの受信用タスクがキャンセルできるようにした。 どうせ閉じるなら、DisposableにしてDisposeしたときに勝手にキャンセルするようにしたい。また…

名前付きパイプでプロセス間の双方向通信を行う(さらに改良版)

C#

パイプ関連記事 もくじ https://tera1707.com/entry/2022/02/06/144447#Pipe やりたいこと 以前の記事で、プロセス間通信のためのパイプ通信を少し改良した。 が、前回のものはまだパイプ受信スレッドを立ち上げると、その後終了ができなかったりまだ改良の…

Taskのキャンセルのしかた その2

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の自分の記事で、Taskのキャンセルの仕方を調べた。 そこで、なんとなくキャンセルの仕方がわかったのだが、下記の記事を拝見して、さらに便利にキャンセルする方法があると知った。 …

管理者権限で別のプロセスを起動する

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 自分のアプリから、別のexeを管理者で起動したい。 やりかた ProcessクラスのItartInfoのVerbを"RunAs"にする。 またその際、UseShellExecuteをtrueにして、そのプロセスをStartする。 そ…

Taskのキャンセルのしかた

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと タスクの中で行っている処理を、キャンセルしたい。 また、以前の記事で、タスクの状態遷移を調べたときに、 下表の中のCanceled(6)とFaulted(7)が、どういう状態なのかがよくわから…

Taskの状態遷移

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと タスクは、作ったり動かしたり、キャンセルしたりで、いろいろ状態が変化する。 その変化を試したときのメモ。 下記のような状態があるらしい。 https://learn.microsoft.com/en-us/dotne…

DIでServiceCollectionに同じInterfaceのクラスを複数登録する

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと 以前の記事で、Ioc と ServiceCollection を使って、DI(Dependency Injection)をやったが、そのときコンストラクタで受けるクラスは、それぞれ別のインターフェースを実装するクラスだ…

XElementを使ってxmlファイルを読み込む

C#

もくじ https://tera1707.com/entry/2022/02/06/144447 やりたいこと xmlファイルを読み込みたい。 具体的には、VisualStudioのC#(.net6)のプロジェクトファイル(.csproj)を読み込んで、中身の情報を見たい。 csprojのサンプルはこんな感じ。 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0</TargetFramework> <ImplicitUsings>e</implicitusings></propertygroup></project>…