C# WinForms应用程序的跨线程操作
是否有一种简单、实际可重用的方式/方法来执行长时间运行的跨线程操作?我的意思是,我需要处理一些需要花费一些时间的事情(发送邮件、上传到DB和FTP服务器),但我还需要同时与表单及其控件进行交互。有很多选项。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件 实现这一点的最常见机制是使用:C# WinForms应用程序的跨线程操作,c#,.net,multithreading,winforms,C#,.net,Multithreading,Winforms,是否有一种简单、实际可重用的方式/方法来执行长时间运行的跨线程操作?我的意思是,我需要处理一些需要花费一些时间的事情(发送邮件、上传到DB和FTP服务器),但我还需要同时与表单及其控件进行交互。有很多选项。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件 实现这一点的最常见机制是使用: 使用/ 手动创建线程 有很多选择。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件 实现这一点的最常见机制是使用: 使用/ 手动创建线程 查看BackgroundWor
- 使用/
- 手动创建线程
- 使用/
- 手动创建线程
- 有很多选择。主要问题是,您需要将工作推送到单独的线程中,但不能从该线程访问控件
实现这一点的最常见机制是使用:
BackgroundWorker
类。这将允许在更新UI时运行长时间运行的进程,而不必手动Invoke()
UI更新UI线程,如果手动使用线程,则必须执行此操作。查看BackgroundWorker
类。这将允许在更新UI时运行长时间运行的进程,而无需手动Invoke()
UI更新UI线程,如果手动使用线程,则必须执行此操作。您希望表单的Invoke/BeginInvoke方法允许对UI执行corssthread操作
最好是创建一个类,该类在另一个线程中执行长任务,并具有一些事件来向窗体发送信号,然后在窗体中可以使用this.BeginInvoke在主线程中执行UI操作。您希望窗体的Invoke/BeginInvoke方法允许对UI执行交叉线程操作
最好是创建一个类,该类在另一个线程中执行长任务,并具有一些事件来向窗体发送信号,然后在窗体中可以使用this.BeginInvoke在主线程中执行UI操作。。。。有什么问题吗?您可以将长时间运行的操作放在不同的线程上,如果需要访问控件,只需将调用委托给UI线程即可。谢谢PoweredByOrange,谢谢@JimMischel,我现在正在查看该链接。我必须承认,术语对我来说是最难学的部分。这可能就是为什么我90%的搜索都没有得到有用的结果的原因。出于某种原因,我能记住其他的东西,但术语似乎不太靠谱。所以。。。有什么问题吗?您可以将长时间运行的操作放在不同的线程上,如果需要访问控件,只需将调用委托给UI线程即可。谢谢PoweredByOrange,谢谢@JimMischel,我现在正在查看该链接。我必须承认,术语对我来说是最难学的部分。这可能就是为什么我90%的搜索都没有得到有用的结果的原因。出于某种原因,我还记得其他事情,但术语似乎不太靠谱。@JimMischel不直接处理线程问题,尽管在使用任务/任务时,您可以使用它简化代码的编写。@JimMischel不直接处理线程问题,尽管在使用Task/Task时,您可以使用它简化代码的编写。