我是LabVIEW程序员,最近初学C# Winform开发,有个问题很迷惑,想请教大家:
不同类或不同命名空间下,通常是用什么办法来做到数据共享的。比如有个线程是做图像处理,图像处理有很多的参数,这些参数要通过一个参数设置的界面去修改、保存,那如果修改了参数,怎么让图像处理的线程实时更新新的参数呢。
按照我用LabVIEW的习惯,我会定义一个类似全局变量的东西,它在一个地方被改了后,其他所有地方都能自动更新,不需要专门去处理,但是放到C#我就不知道该怎么办了,我想过用静态类,但是静态类又不能实例化对象,没法把对象序列化保存到本地文件,所以问问大家比较正规、常用的方法
图像处理这边使用对象?然后对象属性就是图像处理的参数,然后界面通过调用对象方法修改图像处理的参数,线程中每轮处理都要根据本身的属性来设置。也可以用静态的全局变量,我看我们老项目里用的全局静态变量
在C#中,要在不同的类或命名空间中共享参数,可以使用多种方法。下面列出几种常用的方法:
静态类/静态变量
静态类和静态变量可以在整个应用程序中共享,不需要实例化,可以直接通过类名来访问。如果需要修改参数,可以直接修改静态变量的值。静态类中的静态变量可以在整个应用程序中共享,但是不能进行序列化。
单例模式
单例模式是一种创建对象的模式,它保证一个类只有一个实例,并提供一个访问它的全局访问点。可以将参数保存在单例对象中,并在需要使用参数的类中获取单例对象来访问参数。单例模式可以进行序列化,并且可以实现多个线程共享数据的功能。
应用程序配置文件
应用程序配置文件是一个XML文件,可以保存应用程序的参数设置。可以将需要共享的参数保存在配置文件中,并在需要使用参数的类中读取配置文件。应用程序配置文件可以进行序列化,并且可以实现多个线程共享数据的功能。
事件
事件是一种在对象之间进行通信的方式。可以定义一个事件,并在需要使用参数的类中订阅事件。当参数发生变化时,可以触发事件,通知所有订阅者更新参数。事件可以实现多个线程共享数据的功能。
以上方法都有各自的优缺点,需要根据实际情况选择。如果需要在不同的应用程序之间共享数据,可以考虑使用WCF或者Web API等技术。
非常感谢您的耐心回答!
百度搜索“ c# 观察者模 式”。 C# ,Java这类语言 都 是通过这样 的模 式来实现的,C# 还直接集成了“事件”来实现
非常感谢,我去查查
可以不用静态类,用静态字段,这样既可以实例化又可以全局调用
好的,非常感谢
单例模式才是最优解