关于WPF的多线程方法重入的问题,请求各位前辈指教!

关于WPF的多线程方法重入的问题,请求各位前辈指教!,第1张

线程内变量 a 的值来自 TB,然后 a++ 再返回 TB,这不就是相加2000次吗,没问题。

你用的是 this.Dispatcher.Invoke,因为2个线程影响的是同一个 TB,会排队执行。

建议通过进程间通信完成

在程序A中调用Process.Start带上通讯的必要参数,在程序B启动时根据参数执行必要处理,在处理完成后,根据提供的参数依据协议向A通知。

提供两种思路:

1、A窗口通过回调处理Window消息,在调用Process.Start时带上自己的窗口句柄,B启动记录该窗口句柄,在完成指定功能处理后,向该窗口句柄发送消息。A收到消息,继续接下来的处理。

2、A创建Socket在指定端口侦听,在调用Process.Start时,带上IP(分布式)和端口,B启动后完成指定处理,便可以依据通讯协议,向IP的端口发送通知。

资源可以作为静态资源或动态资源进行引用。这是通过使用 StaticResource 标记扩展或 DynamicResource 标记扩展完成的。StaticResource 通过替换已定义资源的值来为 XAML 属性提供值。DynamicResource 通过将值推迟为对资源的运行时引用来为 XAML 属性提供值。动态资源引用强制在每次访问此类资源时都重新进行查找。

什么叫WPF的资源(Resource)?

资源是保存在可执行文件中的一种不可执行数据。在WPF的资源中,几乎可以包含图像、字符串等所有的任意CLR对象,只要对象有一个默认的构造函数和独立的属性。也就是说,应用程序中非程序代码的内容,比如点阵图、颜色、字型、动画/影片档以及字符串常量值,可将它们从程序中独立出来,单独包装成"资源(Resource)"。 静态资源(Static Resource),动态资源(Dynamic Resources)。这两者的区别是:静态资源在第一次编译后即确定其对象或值,之后不能对其进行修改。动态资源则是在运行时决定,当运行过程中真正需要时,才到资源目标中查找其值。因此,我们可以动态地修改它。由于动态资源的运行时才能确定其值,因此效率比静态资源要低。 资源的范围(层级):

WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上。WPF中,资源定义的位置决定了该资源的可用范围。资源可以定义在如下范围中:

(1)物件级:此时,资源只能套用在这个Object物件,或套用至该物件的子物件。

(2)文件级:如果将资源定义在Window或Page层级的XAML档中,那么可以套用到这个文件中的所有物件。

(3)应用程序级:如果我们将资源定义在App.xaml 中,那么,就可以将资源套用到应用程序内的任何地方。

(4)字典级:当我们把资源封装成一个资源字典, 定义到一个ResourceDictionary的XAML文件时,就可以在另一个应用程序中重复使用。每一个框架级元素(FrameworkElement 或者FrameworkContentElement)都有一个资源属性。每一个在资源字典中的资源都有一个唯一不重复的键值(key),在标签中使用x:Key属性来标识它。一般地,键值是一个字符串,但你也可以用合适的扩展标签来设置为其他对象类型。非字符键值资源使用于特定的WPF区域,尤其是风格、组件资源,以及样式数据等。 StaticResources的适用场合:

(1)在资源第一次引用之后无需再修改资源的值。

(2)资源引用不会基于运行时的行为进行重新计算,比如在重新加载Page/Window的时候。

(3)当需要设置的属性不是DependencyObject或Freezable类型的时候,用StaticResource。

(4)当需要将资源编译到dll中,并打包为程序的一部份,或者希望在各应用程序之间共享时,也使用StaticResource。

(5)当需要为一个自定义控件创建一个Theme,并Theme中使用资源,就需要使用StaticResource。因为StaticResource的资源查找行为时可预测的,并且本身包含在Theme中。而对于DynamicResource,即使资源是定义在Theme中,也只能等到运行时确定,导致一些可能意料不到的情况发生。

(6)当需要使用资源设置大量的依赖属性(Dependency Property)的时候。

由于依赖属性具有属性系统提供的值缓存机制,所以,如果能在程序装载时设置依赖属性的值,这样,依赖属性就不需要检查自己的值并返回最后的有效值了。

Dynamic Resource一般使用在如下场合:

(1)资源的值依赖一些条件,而该条件直到运行时才能确定。

包括系统资源,或是用户可设置的资源。比如:可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,而这些属性是动态的,它们的值又来自于运行环境和 *** 作系统。

(2)为自定义控件引用或创建Theme Style。

(3)希望在程序运行期间调整资源字典的内容时。

(4)希望资源可以向前引用时(如上面在Canvas中引用innerLgbResource一样)

(5)资源文件很大,希望在运行时才加载。

(6)要创建的Style的值可能来自于其它值,而这些值又依赖于Theme或用户的设置。

(7)当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。

Dynamic resource的限制条件:属性必须是依赖属性,或是Freezable的。 资源的查询方式

Static Resource的查询

(1)查找使用该资源的元素的Resource字典;

(2)顺着逻辑树向上查找父元素的资源字典,直到根节点;

(3)查找Application资源;

(4)不支持向前引用,即:不能引用在引用点之后才定义的资源。Dynamic Resource的查询

(1)查找使用该资源的元素的Resource字典;

如果元素定义了一个Style 属性,将查找Style中的资源字典;如果元素定义了一个Template属性,将查找FrameworkTemplate中的资源字典。

(2)顺逻辑树向上查找父元素的资源字典,直到根节点;

(3)查找Application资源;

(4)查找当前激活状态下的Theme资源字典;

(5)查找系统资源。

为API生,为框架死,为debug奋斗一辈子,吃符号亏,上大小写的当,最后死在需求上。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12170069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存