无法从方法中获取字符串
Unable to get a string out of a method
我对编码真的很陌生,从未研究过它或类似的东西,只是自己学习,以前从未做过,但我正在尝试创建我的第一个真正的应用程序。
但是,我遇到了2天的问题,我一直想不通,所以我希望你能帮助我。
好的,所以在创建 youtubedlCurrentWorker_Process() 之前,我确实定义了 'public string CurrentYouTubeDLVersion'.
然而,当我的应用程序中的按钮执行 youtubedlCompareVersion_Process() 时,CurrentYouTubeDLVersion 字符串在比较点出现时为空。
下面只是我的代码的一小部分。
为什么 CompareVersion 中的字符串 CurrentYouTubeDLVersion 是空的,而 GetCurrentVersion 运行 之前是空的?
即使我双击 Visual Studio 中的 "CurrentYouTubeDLVersion",它也不会显示 link 到 GetCurrentVersion_Process 中的 link。
namespace MediaDownloader
{
public partial class updates : UserControl
{
public string LatestYoutubeDLVersion;
public string CurrentYouTubeDLVersion;
public void youtubedlGetCurrentVersion_Process()
{
if (File.Exists(YouTubeDLPath))
{
//Here I get the current version of youtube-dl.exe, to get the version number, we have to run youtube-dl.exe --version
Process youtubedl = new Process();
youtubedl.StartInfo.CreateNoWindow = true;
youtubedl.StartInfo.UseShellExecute = false;
youtubedl.StartInfo.RedirectStandardOutput = true;
youtubedl.StartInfo.RedirectStandardError = true;
youtubedl.StartInfo.FileName = YouTubeDLPath;
youtubedl.StartInfo.Arguments = " --version";
youtubedl.Start();
string CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
this.Dispatcher.Invoke((Action)(() =>
{
CurrentYouTubeDLVersionText.Text = "Current youtube-dl.exe version: " + CurrentYouTubeDLVersion;
YouTubeDLVersionStatusText.Text = null;
UpdateYouTubeDL.IsEnabled = false;
}));
}
public void youtubedlCompareVersion_Process()
{
youtubedlGetCurrentVersion_Process();
string LatestYoutubeDLVersion = WebClient.DownloadString("https://yt-dl.org/latest/version");
MessageBox.Show("Latest:" + LatestYoutubeDLVersion + "Current " + CurrentYouTubeDLVersion);
int YouTubeDLUptodate = CurrentYouTubeDLVersion.CompareTo(LatestYoutubeDLVersion);
if (YouTubeDLUptodate < 1)
{
YouTubeDLVersionStatusText.Text = "Your youtube-dl.exe is out of date, please click the button below to update.";
UpdateYouTubeDL.IsEnabled = true;
}
else
{
YouTubeDLVersionStatusText.Text = "youtube-dl.exe is up to date!";
UpdateYouTubeDL.IsEnabled = false;
}
}
}
在 youtubedlGetCurrentVersion_Process
方法中,您正在创建一个新的 CurrentYouTubeDLVersion
字符串,它与您添加到class.
string CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
分配给您创建的 class 级变量,而不是创建一个新的 string
:
CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
然后您可以在 youtubedlCompareVersion_Process
中使用该值。
去掉 CurrentYouTubeDLVersion 前面的 'string' 就可以了
public youtubedlGetCurrentVersion_Process()
{
/* removed code to make easier to read */
//string CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
/* removed code to make easier to read */
}
我对编码真的很陌生,从未研究过它或类似的东西,只是自己学习,以前从未做过,但我正在尝试创建我的第一个真正的应用程序。 但是,我遇到了2天的问题,我一直想不通,所以我希望你能帮助我。
好的,所以在创建 youtubedlCurrentWorker_Process() 之前,我确实定义了 'public string CurrentYouTubeDLVersion'.
然而,当我的应用程序中的按钮执行 youtubedlCompareVersion_Process() 时,CurrentYouTubeDLVersion 字符串在比较点出现时为空。
下面只是我的代码的一小部分。
为什么 CompareVersion 中的字符串 CurrentYouTubeDLVersion 是空的,而 GetCurrentVersion 运行 之前是空的?
即使我双击 Visual Studio 中的 "CurrentYouTubeDLVersion",它也不会显示 link 到 GetCurrentVersion_Process 中的 link。
namespace MediaDownloader
{
public partial class updates : UserControl
{
public string LatestYoutubeDLVersion;
public string CurrentYouTubeDLVersion;
public void youtubedlGetCurrentVersion_Process()
{
if (File.Exists(YouTubeDLPath))
{
//Here I get the current version of youtube-dl.exe, to get the version number, we have to run youtube-dl.exe --version
Process youtubedl = new Process();
youtubedl.StartInfo.CreateNoWindow = true;
youtubedl.StartInfo.UseShellExecute = false;
youtubedl.StartInfo.RedirectStandardOutput = true;
youtubedl.StartInfo.RedirectStandardError = true;
youtubedl.StartInfo.FileName = YouTubeDLPath;
youtubedl.StartInfo.Arguments = " --version";
youtubedl.Start();
string CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
this.Dispatcher.Invoke((Action)(() =>
{
CurrentYouTubeDLVersionText.Text = "Current youtube-dl.exe version: " + CurrentYouTubeDLVersion;
YouTubeDLVersionStatusText.Text = null;
UpdateYouTubeDL.IsEnabled = false;
}));
}
public void youtubedlCompareVersion_Process()
{
youtubedlGetCurrentVersion_Process();
string LatestYoutubeDLVersion = WebClient.DownloadString("https://yt-dl.org/latest/version");
MessageBox.Show("Latest:" + LatestYoutubeDLVersion + "Current " + CurrentYouTubeDLVersion);
int YouTubeDLUptodate = CurrentYouTubeDLVersion.CompareTo(LatestYoutubeDLVersion);
if (YouTubeDLUptodate < 1)
{
YouTubeDLVersionStatusText.Text = "Your youtube-dl.exe is out of date, please click the button below to update.";
UpdateYouTubeDL.IsEnabled = true;
}
else
{
YouTubeDLVersionStatusText.Text = "youtube-dl.exe is up to date!";
UpdateYouTubeDL.IsEnabled = false;
}
}
}
在 youtubedlGetCurrentVersion_Process
方法中,您正在创建一个新的 CurrentYouTubeDLVersion
字符串,它与您添加到class.
string CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
分配给您创建的 class 级变量,而不是创建一个新的 string
:
CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
然后您可以在 youtubedlCompareVersion_Process
中使用该值。
去掉 CurrentYouTubeDLVersion 前面的 'string' 就可以了
public youtubedlGetCurrentVersion_Process()
{
/* removed code to make easier to read */
//string CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
CurrentYouTubeDLVersion = youtubedl.StandardOutput.ReadToEnd();
/* removed code to make easier to read */
}