C#的winform中对于Form窗体的Timer控件问题?
   最近想实现一个控制,就是winform程序向通过socket协议进行数据指令的收发,收到对应的指令启动timer的控件执行timer控件操作的内容,但是发现通过了socket之后就不再执行timer事件中的语句了,如果换做用system.timers.timer 发现使用过程不好控制。求各位大神支个招,解释下为什么?

1个回答

只要实现的话,贴这个
this.Invoke(new Action(()=>{
timer1.Enable=true;
}));
没编译,大概是这样。
听起来是用winform的timer不能跨线程调用,而收socket的是一个子线程,又不想用跨线程的timer,发个委托给主线程就行。

htiannuo
MayAcho 十分感谢啊,跟我找到实现的方式一样,采用委托!辅助线程不能实现,所以用委托就行
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

新人求教!关于C# winform中timer控件定时刷新数据的问题!请高人指点!

写了一个读取数据库数据的方法。 public static double getPlanV(int type) { return (db.PlanV.Count(c => c.Type == type)) <= 0 ? 0 : db.PlanV.Where(c => c.Type == type).First().V.Value; } 程序运行时首先执行一次该方法读取一次数据,绑定到laber控件。比如读取的是0 然后在timer控件里每5分钟执行一次该方法,重新绑定到laber控件。 我把SQL数据库里的值改为100,timer里读取的是还是0,怎么办。 我重新打开程序,读取的就是正确的,可修改数据值后,timer里读取的还是老值。。 求高手指点一下。

在做c# winform 主窗体开了两个窗体Form,希望两个窗体的定时器同步进行

在做c# winform 主窗体开了两个窗体Form(窗体里面有个定时器Forms.timer),希望两个窗体的定时器同时进行,可是执行的时候第二个执行完成,第一个才开始执行,没有两个一起执行的效果,如何解决,c#的三个线程我都试过,不好用,谁有好的解决方法?求大神 主窗体button1按钮,开了两个相同的form2 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.timer1.Enabled = true; f2.Show(); Form2 f3 = new Form2(); f3.timer1.Enabled = true; f3.Show(); } 下面是form2里面的一个timer,里面有个定时器 int i = 0; private void timer1_Tick(object sender, EventArgs e) { timer1.Enabled = false; for (int j = 0; j < 20; j++) { i++; Thread.Sleep(1000); Application.DoEvents(); textBox1.Text = i.ToString(); } // Thread.Sleep(500); }

C#子窗体中timer只能在当前窗体中运行的问题

子窗体中写了一个定时开关机的timertick,现在的问题是关闭了当前的子窗体后timer就不会执行了,怎么让timer能够在子窗体关闭后任然运行 private void timer1_Tick(object sender, EventArgs e) { reader(); if (cycle == 0) { closetype(); } else { int nowWeek = DateTime.Now.DayOfWeek.GetHashCode(); if (nowWeek == cycle) { closetype(); } } }

C# Winfrom项目,如何在from窗体中控制两个timer控件时间的同步显示

在C# Winfrom项目中,一个from窗体,两个timer控件(timer1和timer2),两个Label控件(labe1和label2), timer1是实现0到1分钟的倒计时显示在显示labe1中,timer2是实现到1分钟后自动显示当前时间到label2中. 两个button控件(button1和button2)。button1和button2分别控制timer1的开始和暂停。 timer1.Interval =1000(1秒钟). timer2.Interval = 60000(一分钟) 点击button2先暂停timer1的倒计时显示,后再点击button1开始timer1继续显示倒计时。但是发现timer1和timer2控件显示的频率不一样。 timer1跑得比timer2来的快,代码如下,请问如何处理,谢谢。 开始按钮 button1_click: timer1.Enabled = true; timer2.Enabled = true; =============================== 暂停按钮 button2_click: timer1.Enabled = false; timer2.Enabled = false; ================================== 显示倒计时: timer1_Tick: TimeSpan ts = new TimeSpan(0, 1, 0); //一分钟 String str = ts.Hours.ToString() + ":" + ts.Minutes.ToString() + ":" + ts.Seconds.ToString(); label1.Text = "控制窗体:" + str + ":" + ts.Minutes.ToString(); ts = ts.Subtract(new TimeSpan(0, 0, 1));//每隔一秒减去一秒 =============================================== 显示当前时间: timer2_Tick: DateTime dt = DateTime.Now; string tmpTime = string.Format("{0:F}", dt); label2.Text = tmpTime;

Winform 自定义控件添加不到窗体

在Winform中自定义了一个控件 public partial class DecimalInput : TextBox { } 在“工具箱”中能看到, 但是不能添加到窗体,求大神帮帮忙

c#窗体picturebox控件移动

窗体加载后,pictruebox1控件在左上角用2秒平移到plane右上角也就是picturebox2原来位置,picturebox2平移到右下角,以此类推,实现一个picturebox在plane四个角顺时针平移的效果。

c#我想定义一个cs,来给form调用,但是form里面的控件怎么在cs里面表示

c#我想定义一个cs,来给form调用,但是form里面的控件怎么在cs里面表示 比如说,我定义一个textbox在form里面,我想在cs里面改变这个textbox的值,该怎么做

C#中Form_Paint()在哪里?

需要在这个里面添加代码myPane.Draw(e.Graphics); 求大神指点。。。。

c#下利用委托为动态控件添加响应事件

小白学码,正在学习委托,遇到难题,百思不解。请高手帮忙看看下面代码存在问题。 两个窗体,Form1、Form2,Form1中有一个Button控件。一个外部类:文件夹modules下Btnclass.cs。 意图:单击Form1窗体Button,触发Btnclass类往Form2批量添加动态button控件,并往控件添加响应事件。 难题:已实现在Form2中生成控件,但动态控件单击不响应。 Form1代码: namespace weituo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Modules.Btnclass.AddBtn(this,e); } } class QShow { public delegate void AddBtnEventHander(object sender, EventArgs e); public event AddBtnEventHander AddBtned; } } Btnclass代码: namespace weituo.Modules { class Btnclass { public static void AddBtn(object sender,EventArgs e)//(Form1 objForm) { QShow qshow= new QShow(); Form2 form2 = new Form2(); for (int Btnnum = 0; Btnnum <= 8; Btnnum++) { Button pb = new Button(); pb.Name = "B" + Btnnum.ToString(); pb.Text = "Button" + Btnnum.ToString(); System.Drawing.Point p = new Point(12, 13 + Btnnum * 30);//创建一个坐标,用来给新的按钮定位 pb.Location = p;//把按钮的位置与刚创建的坐标绑定在一起 form2.Controls.Add(pb); qshow.AddBtned += new QShow.AddBtnEventHander(Btn_Click);//将按钮的方法绑定到按钮的单击事件中b.Click是按钮的单击事件 form2.Show(); } } private static void Btn_Click(object sender, System.EventArgs e) { Button pb = (Button)sender;//将触发此事件的对象转换为该Button对象 //if(pb.Name=="B1") MessageBox.Show("" + pb.Name); } } }

用WinForm制作跑马灯!

public Form1() { InitializeComponent(); } string su = string.Empty; //计时器触发事件 private void timer1_Tick(object sender, EventArgs e) { su = this.label1.Text; string sn=string.Empty; int i = 0; foreach (char item in su) { sn = su.Substring(0,1); } this.label1.Text = su + sn; } 现在我的问题是:如何让截取完的字符串向前移动一个位置?

c# 写的windows 窗体应用程序 运行后 界面卡主不动 程序照样运行

本人小白菜菜鸟,刚学会c# 不久,用vs2015写了几个程序,大致内容:循环读取文件夹内word信息, 界面两个按钮,开始和停止。点开始后,程序运行,然后界面就卡主不动了,点停止没反应,点窗体上的叉叉也没反应,只能任务管理器结束进程。请问这是为什么? Ps:代码里面没有timer类的控件。 部分代码如下: 其中的doc和app是全局变量 private static Word.Application app = new Word.Application(); private static Word.Document doc = null; ``` private void button2_Click(object sender, EventArgs e) { var files = Directory.GetFiles(wordPath, "*.doc"); foreach (var file in files) { button2.Text = "进行中。。。"; wordName = file.Replace(textBox2.Text, ""); textBox1.Text = wordName; textBox1.Refresh(); string paperName = wordName.Replace(".doc", ""); if (Sql.existsExam(paperName) > 0) { listBox2.Items.Add ( "此试卷已存在!"+ file.ToString()); listBox2.Refresh(); continue; } try { exam_id=Sql.getExamId(); wordNameSave = wordName.Substring(0, wordName.IndexOf(".")); String path = @"d:\word/img_hy/" + exam_id; BaseClass.createFile(path); BaseClass.writeFile("d:\\word\\log.txt", "**********************************************************************", 0, 1); string log = file+" "+ DateTime.Now.ToString(); BaseClass.writeFile("d:\\word\\log.txt",log, 0, 1); doc = app.Documents.Open(file); //一会要记录word打开的文档 string strContent = ReadWordMian.readWordMain(app, doc, path, wordNameSave); Sql.insertExam(ReadWordMian.paperHead,exam_id, grade_id, subject_id); cutExercises(strContent); log = "we have a finish ! " + wordNameSave + " " + DateTime.Now.ToString(); //Console.WriteLine(DateTime.Now.ToString()); BaseClass.writeFile("d:\\word\\log.txt", log, 0, 1); } catch (Exception err) { button2.Text = "批量入库"; //listBox2.Items.Add("异常:"+"此文件读取异常"+ file+" "+err); BaseClass.writeFile("d:\\word\\log.txt", "异常:" + "此文件读取异常" + file + " " + err, 0, 1); } } // listBox2.Items.Add(error_string); doc.Close(); System.Runtime.InteropServices.Marshal.ReleaseComObject(doc); app.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(app); button2.Text = "批量入库"; } ```

C# Winfrom项目,运行程序一段时间后提示“存储空间不足,无法处理此命令”的报错信息。

在C# Winfrom项目,有一个timer计时器控件(设置每隔6分钟调用其它六个监控视频图像放到对应的Panel控件) 目前遇到的问题是,监控点的视频图像有的由于网络好点显示加载视频图像快点,有的由于网络不是太好加载显示视频图像慢点。 在form窗体运行一段时间后,提示“存储空间不足,无法处理此命令”的报错信息。 发现在这个时间段内,电脑内存的使用率为40%至50%左右。 请问如何修改下面的代码可以解决此问题?谢谢! 附创建显示监控视频图像的代码: void PlayMon(string name, int width, int height, Panel pl, string[] monitorarray) //创建播放监控视频的组件 { foreach(Control ctl in pl.Controls) { ctl.dispose() //内存释放,不过貌似释放不了内存。这个地方还有其它方法可以释放内存? } pl.Controls.Clear(); PlayerMon.PlayerMon ocm = new PlayerMon.PlayerMon(); ocm.Name = name.ToString(); ocm.Width = width; ocm.Height = height; ocm.Top = (pl.Height - ocx.Height) / 2; ocm.Left = ((pl.Width - ocx.Width) / 2)-1; ocm.Play(monitorarray[0], monitorarray[1], monitorarray[2], monitorarray[3], monitorarray[5], monitorarray[6], monitorarray[4], monitorarray[7], "rtsp", monitorarray[10], monitorarray[11], monitorarray[0], monitorarray[1], "HIK-DS8000HC", monitorarray[5], monitorarray[5], monitorarray[2], monitorarray[3], "av_stream", monitorarray[8], monitorarray[12], monitorarray[14]); pl.Controls.Add(ocx); }

c# 关于鼠标穿透失效的问题请教

public partial class Form2 : Form { public double bs { get; internal set; } public Form2() { InitializeComponent(); } public void settime(float n) { } public void quit() { Application.Exit(); } Magnifier m = null; public void resize(float size) { m.magnification = size; } public void rerender() { FormBorderStyle = FormBorderStyle.None; //圆形 GraphicsPath g = new GraphicsPath(); g.AddArc(this.DisplayRectangle, 0, 360); this.Region = new Region(g); StartPosition = FormStartPosition.Manual; int xWidth = SystemInformation.PrimaryMonitorSize.Width;//获取显示器屏幕宽度 int yHeight = SystemInformation.PrimaryMonitorSize.Height;//高度 Location = new Point((xWidth / 2) - this.Width / 2, (yHeight / 2) - this.Height / 2); //传的3个参数 窗体,放大倍数,刷新频率 float x = (float)this.bs; //MessageBox.Show(x.ToString()); m = new Magnifier(this, x, NativeMethods.USER_TIMER_MINIMUM); } private void Form2_Load(object sender, EventArgs e) { this.ShowInTaskbar = false;//窗体不出现在Windows任务栏中 CanPenetrate(); this.TopMost = true;//使窗体始终在其它窗体之上 rerender(); } private const uint WS_EX_LAYERED = 0x80000; private const int WS_EX_TRANSPARENT = 0x20; private const int GWL_EXSTYLE = (-20); private string Var_genre = "";//记录当前操作的类型 #region 在窗口结构中为指定的窗口设置信息 /// <summary> /// 在窗口结构中为指定的窗口设置信息 /// </summary> /// <param name="hwnd">欲为其取得信息的窗口的句柄</param> /// <param name="nIndex">欲取回的信息</param> /// <param name="dwNewLong">由nIndex指定的窗口信息的新值</param> /// <returns></returns> [DllImport("user32", EntryPoint = "SetWindowLong")] private static extern uint SetWindowLong(IntPtr hwnd, int nIndex, uint dwNewLong); #endregion #region 从指定窗口的结构中取得信息 /// <summary> /// 从指定窗口的结构中取得信息 /// </summary> /// <param name="hwnd">欲为其获取信息的窗口的句柄</param> /// <param name="nIndex">欲取回的信息</param> /// <returns></returns> [DllImport("user32", EntryPoint = "GetWindowLong")] private static extern uint GetWindowLong(IntPtr hwnd, int nIndex); #endregion #region 使窗口有鼠标穿透功能 /// <summary> /// 使窗口有鼠标穿透功能 /// </summary> private void CanPenetrate() { uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE); uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED); } #endregion #region 设置颜色和透明度的状态 /// <summary> /// 设置颜色和透明度的状态 /// </summary> private void SetEstate(Form Frm, object sender) { Var_genre = ((ToolStripMenuItem)sender).Name; string Tem_Str = Var_genre; if (Var_genre.IndexOf('_') >= 0) { Var_genre = Tem_Str.Substring(0, Tem_Str.IndexOf('_')); } switch (Var_genre) { case "ToolColor": { Color Tem_Color = Color.Gainsboro; switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString())) { case 1: Tem_Color = Color.Gainsboro; break; case 2: Tem_Color = Color.DarkOrchid; break; case 3: Tem_Color = Color.RoyalBlue; break; case 4: Tem_Color = Color.Gold; break; case 5: Tem_Color = Color.LightGreen; break; } Frm.BackColor = Tem_Color; break; } case "ToolClarity": { double Tem_Double = 0.0; switch (Convert.ToInt32(((ToolStripMenuItem)sender).Tag.ToString())) { case 1: Tem_Double = 0.1; break; case 2: Tem_Double = 0.2; break; case 3: Tem_Double = 0.3; break; case 4: Tem_Double = 0.4; break; case 5: Tem_Double = 0.5; break; case 6: Tem_Double = 0.6; break; case 7: Tem_Double = 0.7; break; case 8: Tem_Double = 0.8; break; case 9: Tem_Double = 0.9; break; } Frm.Opacity = Tem_Double; break; } case "ToolAcquiescence": { Frm.BackColor = Color.Gainsboro; Frm.Opacity = 0.6; break; } case "ToolClose": { Close(); break; } } } #endregion 自己做了一个放大镜功能,想做鼠标穿透但是一直失效想看看怎么回事。

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

Python可以这样学(第一季:Python内功修炼)

Python可以这样学(第一季:Python内功修炼)

C++语言基础视频教程

C++语言基础视频教程

Python可以这样学(第四季:数据分析与科学计算可视化)

Python可以这样学(第四季:数据分析与科学计算可视化)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

Python数据分析与挖掘

Python数据分析与挖掘

微信小程序开发实战之番茄时钟开发

微信小程序开发实战之番茄时钟开发

相关热词 c#怎么获得线程名 c# usb 采集器 c# sort() c#面对对象的三大特性 c# 打印 等比缩放 c#弹出右键菜单 c# 系统托盘图标 c# 键值对 键可以重复 c# 鼠标移上去提示 c#结构体定义
立即提问