Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WinForms-确定void方法何时返回_C#_Winforms_Async Await_Void - Fatal编程技术网

C#WinForms-确定void方法何时返回

C#WinForms-确定void方法何时返回,c#,winforms,async-await,void,C#,Winforms,Async Await,Void,我试图找出当我正在处理的程序返回void方法时,如何确定最佳实践。基本上,程序会调用第三方网格,告诉它将内容保存到Excel工作表中。保存网格的方法是void方法grid.SaveExcel(字符串文件名,…)。我原以为这需要使用await和async命令,但在多个地方读到这不是最佳实践。我很好奇你会如何正确地做这件事,因为我是C语言中的noob,在wait、async、Lamda、Invoke、Action、Task、delegate等方面我都很在行,我觉得我只是把自己弄糊涂了。我基本上知道如

我试图找出当我正在处理的程序返回void方法时,如何确定最佳实践。基本上,程序会调用第三方网格,告诉它将内容保存到Excel工作表中。保存网格的方法是void方法
grid.SaveExcel(字符串文件名,…)
。我原以为这需要使用
await
async
命令,但在多个地方读到这不是最佳实践。我很好奇你会如何正确地做这件事,因为我是C语言中的noob,在
wait
async
、Lamda、Invoke、
Action
Task
delegate
等方面我都很在行,我觉得我只是把自己弄糊涂了。我基本上知道如何打开SQL连接、填充网格、处理按钮事件处理程序、构建基本类等(非常基本的东西)


我基本上想调用
grid.SaveExcel
方法,然后在等待网格保存完成时更新进度条。一旦完成,我想继续下几行代码。有人能帮我指出正确的方向,并向我展示一些代码来尝试实现这一点吗?提前谢谢

您可以在BackgroundWorker上调用您的函数。

然后,此类将在完成时自动引发事件,并允许您报告执行期间的进度,该进度还将在对象调用线程上引发事件。下面是设置一个的详细说明:


所有这些都是假设您确实需要这个过程是异步的。如果不需要,您可以简单地调用save,然后立即使用您想要的任何post save功能。如果保存时间不到200毫秒,最好只将其与UI内联。

grid.SaveExcel
不是标准.NET Framework中的方法。它是从哪里来的?它的定义是什么?它是阻塞(同步)方法还是非阻塞(异步)方法?我正在使用WinForms的ComponentOne控件。这是他们的C1FlexGrid()。我不确定它是否阻塞。根据网格中加载的数据量,保存需要几秒钟到一分钟左右的时间。我希望能够手动增加保存时显示的进度条。如果该方法不提供报告进度的方法,您将无法报告进度。没有提供任何东西。您可以在单独的线程上运行它,以避免阻塞UI,但不会取得进展。至于它何时完成,则是在调用该方法后执行下一条指令的时候。后台是一种非常古老和过时的方法,只有当它是.Net 3.5上的遗留项目时才使用。我认为“过时”这个词太过强烈。正如这个线程(双关语)所指出的,这是一个有争议的话题:如果您想报告进度,作为初学者,BGW很容易实现。由于用户状态是一个对象,因此您可以根据需要随时将任何内容发送回调用线程,这样做的方法内置于对象中。我并不是说它比async/await好,但区别没有String.Format和interpolation那么明显,后者在几乎所有情况下都更干净。报告进度的新方法是,
Proges
class。BGW可以很容易地替换为
TPL
和/或
async/await
,BGW在.Net 4.5:@VMAtm中有明确的标签。该答案下面的答案更正了这一说法。