`
wuhua
  • 浏览: 2111319 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

C# 采用线程重绘图形应该注意的问题。

阅读更多

原文

http://www.3geye.net/?3/viewspace-3350

 

大家都知道J2ME 采用一个线程去获取数据,然后得到数据后更新屏幕是件很容易的事情,
` n hxq1u^3 比如
h Q.Pd0P%r$~f3 Thread{
7Quk%n+_&gar(K3 public void run(){3GEYE4l`_.w v6?z5P
getData();
^:LE%@5k?-l3 repaint();3GEYE6Z+M"W.K6h[3e
}
+ZnLPk/jL)m f3
.\1X `1}"iN3 }
T7q(M!vx+Z+i k)U3 这样做就OK了3GEYER`8IL8S!I|+jFa

%L Q#LR"FgX3 但是这个方法在C#上能成功吗。
dV(],d.G3 答案是NO,为什么呢。安装他们的APIs的说法是,采用线程更新屏幕的是应该要用一个委托的方式来执行。
,p~Zy_g&V:Z3 3GEYEmH"L*T2?i:e
看看我是怎么做的。3GEYE2M?{} VC#O#tqa

|R_a#|R8g3 Thread{
GXY0c:~3@^3 public void run(){3GEYEl E8ap a*u~-a9E\@
getData();3GEYEGQKLb*CI
updateWebBrowser();
+P5?!K;f#m6D#H3 }3GEYE}I4\)r&`$Jj1Y

ZY,d%S uw5K3 delegate void Repaint();3GEYE!g.|Z5}t7f#`�j

D6Ez{ y0t3        public void repaint()3GEYEy&Yi1m i*S"C9J$E
       {
A [So:?3
7KY%L6O C!M t3            this.webBrowser.repaint();3GEYE*T4C})c V n]
       }
H5{^"g/VM3
&kz$^e&b3        /**3GEYEb |\$` lh
        * 更新视图
8I}o&J&t/mW3         */
n*gx phQQ9o3        public void updateWebBrowser()3GEYE:Q-T+P5{4E
       {
a6w)V�mo4D0N3           //这里是更新屏幕的代码,看各自需求做相应的实现。3GEYE&h:OBm,Ukm2y
       }
? GN!~Vm3
7y6m#a-ND a(o3 }3GEYE+R!f9A H,@�k"K y

-YgB'B/U |3 上面就是C#的处理方式。应该也是可以理解的

1
0
分享到:
评论

相关推荐

    c# GDI 图形移动

    最后,为了实现图形的动态移动,通常会结合计时器(Timer)组件,每间隔一定时间就更新一次图形位置并重绘控件。记得在不再需要时释放GDI+资源,如关闭`Graphics`对象和释放`Pen`、`Brush`等。 通过这些步骤,我们...

    vs 2010 c# 图形动画

    大量复杂的图形动画可能会导致界面卡顿,因此需要合理地使用双缓冲技术来减少闪烁,并确保只在必要的时候进行重绘。此外,对于复杂的动画逻辑,可以考虑使用多线程或者异步编程来避免阻塞UI线程。 总的来说,使用C#...

    C#多线程实例代码,抽奖游戏

    5. **重绘**:`OnPaint`事件是窗体或控件重绘时触发的,可以通过重写这个事件来实现自定义的绘图逻辑。例如,在抽奖游戏中可能需要在画布上绘制旋转的转盘、动态效果等。 6. **不规则窗体拖动**:要实现不规则形状...

    C#下多线程实现实例----一个图形化的排序算法演示程序.pdf

    在C#环境下实现多线程编程的一个实际案例是一个图形化的排序算法演示程序。本文将详细解读该程序中涉及的知识点,包括C#多线程编程、图形用户界面设计、排序算法以及事件处理机制。 首先,了解C#中的多线程编程是...

    c#自绘时钟

    为了使时钟实时更新时间,我们需要创建一个后台线程,每隔一定时间(如1秒)调用`Invalidate`方法,触发控件的重绘,从而更新指针的位置。 在处理时间更新时,我们需要注意线程安全问题。因为`OnPaint`方法可能会被...

    WPF下,高性能绘图,写WriteableBitmap,多线程,双缓存

    为了解决这个问题,项目采用了多线程技术,将计算密集型的绘图任务放到后台线程执行,保证了UI的流畅性。后台线程绘制完成后,再通过WriteableBitmap的锁机制安全地更新UI中的图像,确保线程安全。 3. **双缓存策略...

    龟兔赛跑 多线程 C# 动画显示

    在实现过程中,还需要注意线程同步的问题。由于两个线程可能会同时尝试更新UI,这可能导致竞态条件,影响动画的正确性。C#提供了多种同步机制,如Mutex、Semaphore或锁定(lock关键字),可以用来确保在任何时候只有...

    C# 重绘圆角矩形,模仿360

    "C# 重绘圆角矩形,模仿360"这个主题就是关于如何在C#窗体中实现类似360软件(如毒霸悟空)那样的圆角矩形界面效果。在这个过程中,我们需要利用GDI+(Graphics Device Interface Plus)来绘制图形,并确保在多线程...

    C#winform中绘制图形,并实现拉伸效果

    频繁的重绘可能导致UI变得卡顿,因此,我们可以在必要时才更新图形,而不是每次Timer事件都进行重绘。此外,通过设置双缓冲(Double Buffering)可以减少闪烁,提高绘制的平滑度。 以下是一个简化的代码示例: ```...

    C#多通道串口绘图demo

    - **刷新界面**:每次绘制后,可能需要调用`Invalidate`方法来触发重绘,确保界面更新。 3. **优化与注意事项**: - **性能优化**:大量数据绘图可能导致界面卡顿,可以通过双缓冲技术减少闪烁,或者使用异步处理...

    C# winform 自己做的音乐播放器,运用了大量重绘和美化

    在本文中,我们将深入探讨如何使用C# WinForm开发一个自定义的音乐播放器,以及在其中应用重绘和美化技术。C#是一种强大的编程语言,尤其适合构建桌面应用程序,而WinForm是C#用于创建图形用户界面(GUI)的主要框架...

    C#绘制曲线示例源码(含SQL数据库),c#绘制曲线图,C#源码.zip.zip

    6. 更新与刷新:如果数据是动态变化的,需要定时更新图表,可以通过重绘控件或者调用Invalidate方法来实现。 至于SQL数据库部分,示例可能展示了如何使用ADO.NET的SqlConnection、SqlCommand、SqlDataReader等类来...

    C#源码,动态实时绘图

    在实时绘图中,我们需要定期调用`Invalidate()`方法,强制控件重绘,以显示新的数据点。 2. **WPF绘图**:WPF提供了更强大的绘图能力,通过使用`System.Windows.Shapes`和`System.Windows.Media`命名空间。可以使用...

    C#编写的彩球游戏程式源码

    总体来说,这款【C#编写的彩球游戏程式源码】涵盖了C#语言基础、图形用户界面设计、事件处理、面向对象编程、碰撞检测算法、多线程编程等多个方面的知识点,对于初学者来说,分析和学习这个源码将是一次极好的实践...

    C# 桌面程序实现控件水波

    同时,考虑到性能,应尽量优化绘制代码,避免不必要的重绘。 5. **交互响应**:为了让水波效果更具互动性,我们可以监听用户的鼠标事件,如鼠标点击或悬停。当用户与控件交互时,可以触发特定的水波动作,如产生新...

    C#开发winform的游戏

    通过不断重绘画面并更新图形位置,可以实现简单的动画效果。更复杂的游戏可能会使用DirectX或OpenGL等底层图形库,但初学者通常从WinForms的简单绘图开始。 **游戏逻辑** 游戏逻辑是游戏的核心部分,包括玩家移动...

    c# Winform 自定义控件 缩放不卡顿。最大可放大至65535。ROI绘制 矩形 圆形 ROI修改

    前面通过Picturebox控制图片缩放平移,操作很顺滑,但是放大的时候发现一个问题,放大超过一定尺寸之后画面会非常的卡,可能重绘的面积比较大。 解决思路:放大的过程中,如果图像有超出窗口的部分,则把这部分图像...

    C#绘制波形图Demo

    5. **实时更新**: 如果需要实时显示数据变化,可以设置定时器,每隔一定时间间隔(例如,每秒一次)更新数据并重绘图形。确保在UI线程安全的情况下更新,可以使用Control.Invoke或BeginInvoke方法。 6. **优化性能*...

    外国人C#写的飘雪花源码

    2. **动画原理**:飘雪效果需要动态更新屏幕上的雪花位置,这通常通过定时器(如System.Windows.Forms.Timer或System.Threading.Timer)配合重绘操作来实现。 3. **随机数生成**:为了模拟雪花随机飘落的效果,需要...

    drawRegionByThread_画图_多线程_

    在C#编程中,"drawRegionByThread_画图_多线程_"是一个关于利用多线程技术在图形用户界面(GUI)上高效绘制区域的示例。这个项目旨在展示如何通过多线程来避免UI线程阻塞,提高应用程序的响应性。下面将详细解释相关...

Global site tag (gtag.js) - Google Analytics