【解決方法】プロセスのoutputdatareceivedイベントハンドラについて


やあ、
私の問題は、カスタム オブジェクトを OutputDataReceived メソッドに送信できないことです。 詳細:

URL、タイトル、説明などのプロパティを含む Material というクラスがあります。

次に、プロセスを開始します。 私の目標は、URL を使用してタイトルを取得することです。 つまり:

(疑似コード)

C#
Material m=new Material(URL);
Process proc=new Process();
proc.startInfo.FileName = youtube_dl;
proc.startInfo.Arguments="--get-title "+m.URL;  // get title using url
proc.OutputDataReceived += OutputDataReceived;
proc.Start();

これまでのところ、すべて問題ありません。 e.Data を使用してデータを取得できます
void OutputDataReceived(object sender, DataReceivedEventArgs e) メソッド。

問題は、Material オブジェクトにこのデータを次のように入力したいということです:

C#
m.Title=e.Data;

しかし、イベントハンドラーの引数はオブジェクトと DataReceivedEventArgs のみであるため、引数を渡すことはできません。 では、グローバル変数を使用せずにこれを行うにはどうすればよいですか。

私が試したこと:

カスタムデータをハンドラーのオブジェクトパラメーターに入れようとしましたが、失敗しました。 私は立ち往生しています。

解決策 1

わかりました、私は自分でそれをしました:

C#
Material m=new Material(URL);
process.OutputDataReceived +=(Object _sender, DataReceivedEventArgs _args)=>DoSomething(m, _sender, _args);

 public void DoSomething(Material mt,object sender, DataReceivedEventArgs e)
{
    MessageBox.Show("Captured Data:" + e.Data);
    MessageBox.Show("My Data:" + mt.Info);
}

コメント

タイトルとURLをコピーしました