質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

Process.StandardOutput.ReadToEnd()関数で処理がフリーズする原因が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1回答

0グッド

0クリップ

1030閲覧

投稿2022/05/19 02:32

提示コードですがConverter.csの関数GetFormat(String? url)部のpro.StandardOutput.ReadToEnd();の部分で処理が停止してしまいますこれは何が原因なのでしょうか?

環境

OS: windows10
IDE: Visual studio 2022
フレームワーク: .Net 6.0

確認したこと

MainWindow.csの初期化部ですが先にウインドウフォームの初期化を行ってその後Convert.Init()関数を実行してConverterクラスを初期化してその際にpro.StartInfo.RedirectStandardOutput = true; pro.StartInfo.RedirectStandardError = true;をしてStandardOutput.ReadToEnd();関数を使えるよにしています。Debug.WriteLine()関数(出力画面参照)でInit関数が先に実行されていることを確認しました。Converter.GetFormat()関数をコメントアウトするとウインドウが表示されるためこの関数が原因なのは確実です。

参考サイト:https://atmarkit.itmedia.co.jp/fdotnet/dotnettips/805pipeasync/pipeasync.html
参考サイト(リファレンス): https://docs.microsoft.com/ja-jp/dotnet/api/system.diagnostics.process.standardoutput?view=net-6.0

出力画面
'Downloader.exe' (CoreCLR: DefaultDomain): 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\System.Private.CoreLib.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 //文字数の関係で省略 'Downloader.exe' (CoreCLR: clrhost): 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\System.Diagnostics.Process.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 Init 'Downloader.exe' (CoreCLR: clrhost): 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\System.Text.Encoding.Extensions.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 あああああ プログラム '[11572] Downloader.exe' はコード 4294967295 (0xffffffff) で終了しました。
MainWindow.cs

cs

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Diagnostics; 7using System; 8using System.IO; 9 10namespace Downloader 11{ 12 public partial class MainWindow : Form 13 { 14 15 16 17 public MainWindow() 18 { 19 InitializeComponent(); //ウインドウ初期化 20 21 Converter.Init(); //初期化 22 23 Format? f = Converter.GetFormat("https://www.youtube.com/watch?v=0O7Wc9OgslY&list=RDzCmdKyNYDTw&index=5"); 24 25 26 } 27 28 29 } 30} 31
Converter.cs

cs

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6using System.Diagnostics; 7using System; 8using System.IO; 9 10namespace Downloader 11{ 12 //public static class Function 13 static public class Converter 14 { 15 private static Process pro = new Process(); 16 17 /* ########################### 初期化 ###########################*/ 18 static public void Init() 19 { 20 Debug.WriteLine("Init"); 21 pro.StartInfo.FileName = "yt-dlp "; 22 pro.StartInfo.RedirectStandardOutput = true; 23 pro.StartInfo.RedirectStandardError = true; 24 pro.StartInfo.CreateNoWindow = true; // コンソール・ウィンドウを開かない 25 pro.StartInfo.UseShellExecute = false; // シェル機能を使用しない 26 27 } 28 29 /* ########################### URLからフォーマット取得 ###########################*/ 30 static public Format? GetFormat(String? url) 31 { 32 Format? data = new Format(); 33 34 pro.StartInfo.Arguments = " -F " + url; 35 //Debug.WriteLine("いい"); 36 37 pro.Start(); 38 39 //StreamReader reader = pro.StandardOutput; 40 //string output = reader.ReadToEnd(); 41 42 //Debug.WriteLine("おおお"); 43 //Debug.WriteLine(output); 44 //pro.WaitForExit(); 45 Debug.WriteLine("あああああ"); 46 47 string result = pro.StandardOutput.ReadToEnd(); 48 Debug.WriteLine("qqqqq"); 49 50 if (result == "") 51 { 52 MessageBox.Show("URL ERROR", "", MessageBoxButtons.OK, MessageBoxIcon.Error); 53 54 return null; 55 } 56 else 57 { 58 Debug.WriteLine("ううう"); 59 60 /* 61 StringReader sr = new StringReader(result); 62 string? line = sr.ReadLine(); 63 while (line != null) 64 { 65 66 Debug.WriteLine(line); 67 68 line = sr.ReadLine(); 69 70 } 71 72 sr.Close(); 73 */ 74 75 } 76 77 Debug.WriteLine("いい"); 78 79 80 return null; 81 } 82 83 /* ########################### 指定した文字以降を削除 ###########################*/ 84 static public string GetRemoveRight(string str, string removeStr) 85 { 86 int length = str.IndexOf(removeStr); 87 if (length < 0) 88 { 89 return str; 90 } 91 92 return str.Substring(0, length); 93 } 94 95 96 97 } 98} 99

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/05/19 02:51

こちらの質問が複数のユーザーから「調査したこと・試したことが記載されていない質問」という指摘を受けました。

Zuishin

2022/05/19 02:45

この原因は書いたけど削除したよね。
退会済みユーザー

退会済みユーザー

2022/05/19 02:47

削除した覚えはないのですが?なんて質問でしょうか?

回答1

0

ベストアンサー

提示画像の下部に

'list' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 'index' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

とありますがこれが原因で処理が止まっていることが原因でした。
よってURLの&以降を削除したら解消しました。

参考URL https://www.youtube.com/watch?v=0O7Wc9OgslY
イメージ説明

投稿2022/05/19 03:05

退会済みユーザー

退会済みユーザー

総合スコア0

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

.NET

.NETとは、主に.NET Frameworkと呼ばれるアプリケーションまたは開発環境を指します。CLR(共通言語ランタイム)を搭載し、入力された言語をCIL(共通中間言語)に変換・実行することが可能です。そのため、C#やPythonなど複数の言語を用いることができます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。