winform绘制闪烁 前台有个线程隔一秒给控件赋值,控件就开始闪烁,如何处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform绘制闪烁 前台有个线程隔一秒给控件赋值,控件就开始闪烁,如何处理相关的知识,希望对你有一定的参考价值。

protected override void OnPaint(PaintEventArgs e)
base.OnPaint(e);
using (Graphics g = e.Graphics)

using (Bitmap bufferimage = new Bitmap(this.Width - 1, this.Height - 1))
g.Clear(this.BackColor);
g.SmoothingMode = SmoothingMode.HighQuality; //高质量
g.PixelOffsetMode = PixelOffsetMode.HighQuality; //高像素偏移质量
Rectangle rect = new Rectangle(0, 0, bufferimage.Width - 2, bufferimage.Height - 2);
g.DrawRectangle(new Pen(Brushes.Brown), rect);
g.FillRectangle(Brushes.YellowGreen, rect);
g.DrawString(MyName, new Font(FontFamily.GenericSerif, 12f), Brushes.BlueViolet, new PointF(20, 20));
Graphics dc = Graphics.FromImage(bufferimage);
g.DrawImage(bufferimage, 0, 0);
dc.Dispose();
//this.CreateGraphics().DrawImage(bufferimage, 0, 0);


你试试加这个
//空载重写该方法,可以解决画面闪烁问题,具体操作到OnPaint函数中实现
protected override void OnPaintBackground(PaintEventArgs e)


追问

你好,还是会出现闪烁

追答

你到底是控件闪烁还是界面闪烁,我看你下面发的代码又是给控件赋值,上面的是GDI画图。

追问

是这样的,我这个是个用户控件,我在用户控件上定义了一些变量,然后我在界面上给用户控件上赋值,就出现闪烁了

追答

如果你值一直在变得话就用绑定,使用dataSource比直接赋值好些。你试试吧。

追问

能给一些提示么 刚开始做 没有思路 谢谢

追答

http://www.cnblogs.com/scy251147/archive/2011/10/23/2221991.html 控件绑定值,每次更改数据源就行了。

参考技术A 给控件赋值代码也发出来,这个代码没法判断原因追问

while (true)
Random rand = new Random(); int count = rand.Next(0, 300); image1.MyName = count + "xxx"; image1.MySex = count % 2 == 0 ? "a" : "b"; Thread.Sleep(500);

追答

不要在界面线程里面循环和sleep,重新实例一个线程做这个工作
闪烁是什么意思,界面卡主吗?

追问

我这个是个控件,是这个控件赋值的话,这个控件就会闪烁,界面不卡

求高手赐教: 想做一个用CPU定时器0的中断,产生一个每隔一秒LED灯闪烁一次的程序

求高手赐教:

想做一个用CPU定时器0的中断,产生一个每隔一秒LED灯闪烁一次的程序

中断程序:

interrupt void TINT0_ISR(void) // CPU-Timer0中断函数

CpuTimer0.InterruptCount++;
if( CpuTimer0.InterruptCount==1)
GpioDataRegs.GPACLEAR.bit.GPIOA0=1;
if( CpuTimer0.InterruptCount==2)
GpioDataRegs.GPASET.bit.GPIOA0=1;
CpuTimer0.InterruptCount=0;
PieCtrl.PIEACK.all=PIEACK_GROUP1 ;
CpuTimer0Regs.TCR.bit.TIF=1;
CpuTimer0Regs.TCR.bit.TRB = 1;
EINT;


GPIO设置:
void InitGpio(void)

EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0=0;
GpioMuxRegs.GPADIR.bit.GPIOA0=1;
GpioDataRegs.GPASET.bit.GPIOA0=1;
EDIS;


CPU定时器0设置:

#include "DSP28_Device.h"
struct CPUTIMER_VARS CpuTimer0;
struct CPUTIMER_VARS CpuTimer1;
struct CPUTIMER_VARS CpuTimer2;

void InitCpuTimer0(void)

CpuTimer0.RegsAddr=&CpuTimer0Regs;
CpuTimer0Regs.PRD.all=0xFFFFFFFF;
CpuTimer0Regs.TPR.all=0;
CpuTimer0Regs.TPRH.all=0;
CpuTimer0Regs.TCR.bit.TSS=0;
CpuTimer0Regs.TCR.bit.TRB=1;
CpuTimer0.InterruptCount=0;

void ConfigCpuTimer(struct CPUTIMER_VARS *Timer,float Freq,float Period)

Uint32 temp;
Timer->CPUFreqInMHz=Freq;
Timer->PeriodInUSec=Period;
temp=(long)(Freq*Period);
Timer->RegsAddr->PRD.all=temp;
Timer->RegsAddr->TPR.all=0;
Timer->RegsAddr->TPRH.all=0;
Timer->RegsAddr->TCR.bit.TIF=1;
Timer->RegsAddr->TCR.bit.TSS=0;
Timer->RegsAddr->TCR.bit.TRB=1;
Timer->RegsAddr->TCR.bit.SOFT=1;
Timer->RegsAddr->TCR.bit.FREE=1;
Timer->RegsAddr->TCR.bit.TIE=1;
Timer->InterruptCount=0;

主函数:
#include "DSP28_Device.h"
/*#include "DSP28_Globalprototypes.h"*/

void main(void)

InitSysCtrl(); //初始化系统函数
DINT;
IER = 0x0000; //禁止CPU中断
IFR = 0x0000;
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //初始化PIE中断向量表
InitGpio(); //初始化Gpio口
InitPeripherals();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT0 = &TINT0_ISR;//指定中断服务子程序
EDIS; // This is needed to disable write to EALLOW protected registers
PieCtrl.PIEIER1.bit.INTx7=1;
IER|=M_INT1;
EINT;
ERTM;
ConfigCpuTimer(&CpuTimer0,150,1000000);
StartCpuTimer0();//启动定时器0
for(;;)

可是执行完为什么没有进入中断啊?灯没有反应

参考技术A PieCtrl.PIEACK.all=PIEACK_GROUP1 ;
换为PieCtrl.PIEACK.bit.ACK1=1;
参考技术B 我最近也遇到同样的问题,CpuTimer0Regs.TIM在运行的过程中会减一,但是不会进入中断,不知道为什么,求高手指教 参考技术C PieVectTable.XINT13= &ISRTimer1; 加这句话再试一下 参考技术D 执行语句循环,没有最终执行语句!追问

不好意思,我还是不太清楚,想问下到底怎么能执行中断语句?
还有这样设置对吗?
CpuTimer0Regs.TCR.bit.TSS=0;
Timer->RegsAddr->TCR.bit.TSS=0

以上是关于winform绘制闪烁 前台有个线程隔一秒给控件赋值,控件就开始闪烁,如何处理的主要内容,如果未能解决你的问题,请参考以下文章

求高手赐教: 想做一个用CPU定时器0的中断,产生一个每隔一秒LED灯闪烁一次的程序

winform 界面加载闪烁问题

C#-WinForm-Timer控件

vb怎么每隔一秒自动点击按钮

Winform刷新时界面假死闪烁

C# Winform开发中,通过timer控件对Listview中的数据进行刷新,存在不停闪烁的问题!