不用说,我是C#的新手,并且在学习过程中学习了一些基本的知识。我试图了解异步/等待功能。我有一个包含2个文本框和一个按钮的表单。当我单击按钮时,它检查远程计算机的服务状态(在本例中为远程注册表),在检查时它会写入它检查注册表并告诉用户等待,然后在状态停止并获取一些值时启动我寻找并写入第二个文本框C#异步/等待写入文本框
我的代码工作,我能够得到我的价值观但在这段时间GUI冻结我试图实现backgroundworker,线程和异步/等待没有我试图做任务,并不能得到它的工作
这里或其他网站上显示的所有示例只是返回int而我试图返回一个字符串,写入状态和我想要的值textboxes。我试图将它转换为字符串没有成功。
长话短说,对于这种类型的过程,什么是更好的方法?有人能告诉我怎么评论一路上有什么事情,所以我理解得更好?我想学习如何做到这一点,但同时学习为什么,并学习编写更干净的代码。
谢谢大家提前抽出时间。
string ComputerName = "Lab01";
public frmRegChecker()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
Check_Status();
}
private void Check_Status()
{
TxtBoxstatus.AppendText("Checking Remote Registry service status on computer : " + ComputerName);
TxtBoxstatus.AppendText(Environment.NewLine);
TxtBoxstatus.AppendText("Please wait... ");
ServiceController sc = new ServiceController("RemoteRegistry", ComputerName);
try
{
TxtBoxstatus.AppendText("The Remote Registry service status is currently set to : " + sc.Status.ToString());
TxtBoxstatus.AppendText(Environment.NewLine);
if (sc.Status == ServiceControllerStatus.Stopped)
{
// Start the service if the current status is stopped.
TxtBoxstatus.AppendText("Starting Remote Registry service...");
TxtBoxstatus.AppendText(Environment.NewLine);
try
{
// Start the service, and wait until its status is "Running".
sc.Start();
sc.WaitForStatus(ServiceControllerStatus.Running, new TimeSpan(0, 0, 3));
sc.Refresh();
sc.WaitForStatus(ServiceControllerStatus.Running);
// Display the current service status.
TxtBoxstatus.AppendText("The Remote Registry status is now set to:" + sc.Status.ToString());
richTextBox1.AppendText(Environment.NewLine);
try
{
var reg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ComputerName);
var key = reg.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\");
string _OSVersion = (key.GetValue("CurrentVersion")).ToString();
richTextBox1.AppendText("OS version is : " + _OSVersion);
richTextBox1.AppendText(Environment.NewLine);
}
catch (InvalidOperationException)
{
richTextBox1.AppendText("Error getting registry value from" + ComputerName);
richTextBox1.AppendText(Environment.NewLine);
}
}
catch (InvalidOperationException)
{
richTextBox1.AppendText("Could not start the Remote Registry service.");
richTextBox1.AppendText(Environment.NewLine);
}
}
else if (sc.Status == ServiceControllerStatus.Running)
{
try
{
var reg = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ComputerName);
var key = reg.OpenSubKey(@"Software\Microsoft\Windows NT\CurrentVersion\");
string _OSVersion = (key.GetValue("CurrentVersion")).ToString();
richTextBox1.AppendText("OS version is : " + _OSVersion);
richTextBox1.AppendText(Environment.NewLine);
}
catch (InvalidOperationException)
{
richTextBox1.AppendText("Error getting registry value from" + ComputerName);
richTextBox1.AppendText(Environment.NewLine);
}
}
}
}
catch
{
richTextBox1.AppendText("Error getting registry value from " + ComputerName);
richTextBox1.AppendText(Environment.NewLine);
}
}
后台工作人员应该为此工作,这是为那些设计的工作。后台工作人员遇到了什么问题? –
嗨艾瑞克,感谢您的快速回复。我用背景工具看到的例子都带有进度条,它向标签结果报告一个整数。我只是无法实现它如何将字符串状态报告返回到文本框。我得到的错误就像你无法从另一种控制类型的东西访问文本框。 – Besiktas
您*说*您无法获得“异步”解决方案,但您完全没有显示任何异步代码。 – Servy