以下是我们可以退出应用程序的方式:Environment.Exit(0)Application.Exit()Form.Close()这三种方法有什么区别,何时使用每种方法? 最佳答案 正确的方法是Application.Exit()。根据Documentation,它会终止所有消息循环并关闭所有窗口,从而使您的表单有可能执行其清理代码(在Form.OnClose等中)。Environment.Exit只会终止进程。如果某种形式有例如未保存的更改它不会有任何机会询问用户是否要保存它们。此外,资源(数据库连接等)无法正确释放,文件可能无
如果我有以下情况:StreamWriterMySW=null;try{StreamMyStream=newFileStream("asdf.txt");MySW=newStreamWriter(MyStream);MySW.Write("blah");}finally{if(MySW!=null){MySW.Flush();MySW.Close();MySW.Dispose();}}我是否可以只调用MySW.Dispose()并跳过关闭,即使它已提供?是否有任何Streamimplimentations无法按预期工作(如CryptoStream)?如果不是,那么下面就是错误的代码:us
我的方法返回Task。我想等到它完成。我应该用什么.Wait()还是.GetAwaiter().GetResult()?它们有什么区别? 最佳答案 两者都是同步等待操作结果(您应该尽可能避免这些)。区别主要在于处理异常。使用Wait时,异常堆栈跟踪不会改变并代表异常发生时的实际堆栈,因此如果您有一段代码在线程池线程上运行,您将拥有像这样堆叠ThreadPoolThread.RunTaskYourCode.SomeWork另一方面,.GetAwaiter().GetResult()将重新处理堆栈跟踪以考虑所有异步上下文,忽略部分代码在
我是C#的新手,我试图查看之前的帖子,但没有找到好的答案。在具有单个窗体的C#Windows窗体应用程序中,使用Form.Close()还是使用Form.Dispose()更好?MSDN表示对象内的所有资源都已关闭,并且在调用Close时会释放表单。尽管如此,我还是在网上遇到了几个遵循Dispose而不是Close的示例。一个人比另一个人有优势吗?在哪些情况下我们应该更喜欢其中一种? 最佳答案 ThisMSDN上的论坛告诉你。Form.Close()sendstheproperWindowsmessagestoshutdownthe
在MSDN中,我发现CloseReason.UserClosing知道用户已决定关闭表单但我想点击X按钮或点击关闭按钮都是一样的。那么如何在我的代码中区分这两者呢?谢谢大家。 最佳答案 假设您要求使用WinForms,您可以使用FormClosing()event.表单关闭时,事件FormClosing()会被触发。要检测用户是否单击了X或您的CloseButton,您可以通过sender对象获取它。尝试将sender转换为Button控件,并可能验证其名称“CloseButton”,例如。privatevoidForm1_Form
所以最近有人告诉我,我将.ContinueWith用于任务的方式并不是使用它们的正确方式。我还没有在互联网上找到这方面的证据,所以我会问你们,看看答案是什么。这是我如何使用.ContinueWith的示例:publicTaskDoSomething(){returnTask.Factory.StartNew(()=>{Console.WriteLine("Step1");}).ContinueWith((prevTask)=>{Console.WriteLine("Step2");}).ContinueWith((prevTask)=>{Console.WriteLine("Step3
Stream、StreamReader、StreamWriter等类实现了IDisposable接口(interface)。这意味着,我们可以在这些类的对象上调用Dispose()方法。他们还定义了一个名为Close()的public方法。现在让我感到困惑的是,一旦我处理完对象后我应该调用什么?如果我同时调用两者怎么办?我目前的代码是这样的:using(StreamresponseStream=response.GetResponseStream()){using(StreamReaderreader=newStreamReader(responseStream)){using(Str
我不太明白Task.Wait和await之间的区别。我在ASP.NETWebAPI服务中有类似于以下功能的东西:publicclassTestController:ApiController{publicstaticasyncTaskFoo(){awaitTask.Delay(1).ConfigureAwait(false);return"";}publicasyncstaticTaskBar(){returnawaitFoo();}publicasyncstaticTaskRos(){returnawaitBar();}//GETapi/testpublicIEnumerableGe
我想确保在webdriver开始执行操作之前存在一个元素。我正在尝试让这样的东西工作:WebDriverWaitwait=newWebDriverWait(driver,newTimeSpan(0,0,5));wait.Until(By.Id("login"));我主要是在纠结如何设置匿名函数... 最佳答案 使用solutionprovidedbyMikeKwan可能会对整体测试性能产生影响,因为隐式等待将用于所有FindElement调用。很多时候您会希望FindElement在元素不存在时立即失败(您正在测试格式错误的页面、缺
我可能遗漏了一些东西,但这样做有什么区别:publicvoidMyMethod(){Taskt=Task.Factory.StartNew(DoSomethingThatTakesTime);t.Wait();UpdateLabelToSayItsComplete();}publicasyncvoidMyMethod(){varresult=Task.Factory.StartNew(DoSomethingThatTakesTime);awaitresult;UpdateLabelToSayItsComplete();}privatevoidDoSomethingThatTakesTi