gpt4 book ai didi

c# - 与 winform 相比,来自控制台的过程

转载 作者:行者123 更新时间:2023-11-30 14:36:35 30 4
gpt4 key购买 nike

以下控制台应用程序运行正常 - 我很惊讶它没有出错。

class DelegateExperiments
{

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//open notepad when the console begins
//create an event that fires and writes "Notepad closed" in the console
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//instance variables of the form
private const string helloText = "hello world";
private const string exitText = "you just closed notepad";
private Process myProcess;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


static void Main(string[] args)
{

Console.WriteLine(helloText);

DelegateExperiments myInstance;
myInstance = new DelegateExperiments();
myInstance.Foo();

Console.Read();
}

void Foo()
{

myProcess = new Process();
myProcess.StartInfo.FileName = @"notepad.exe";
myProcess.Exited += MyProcessExited;
myProcess.EnableRaisingEvents = true;
//myProcess.SynchronizingObject = this;
myProcess.Start();

}

private void MyProcessExited(Object source, EventArgs e)
{
Console.WriteLine(exitText);
}


}

如果我尝试用 winform 做一些类似的事情,即将消息写回表单上的标签,那么它会更复杂并且需要行 myProcess.SynchronizingObject = this; 才能工作。为什么它们应该不同?

最佳答案

Console 类是有意编写为线程安全的。您可以从任何线程调用它。它甚至会确保不“重叠”来自不同线程的调用。 Console.Write/WriteLine 是原子的。这是因为控制台旨在与 shell 交互,而 shell 的一个主要目的是能够从多个进程收集输入。让它能够做到这一点是一项相当大的工作量,但它需要完成才能真正实现其目的。

GUI 对象(例如标签)在设计时并未考虑到这一点。

关于c# - 与 winform 相比,来自控制台的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10333750/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com