C# 中System.Timers.timer 如何通知UI线程

string ss="";
private void Form1_Load(object sender, EventArgs e)
{
timer.Elapsed += new System.Timers.ElapsedEventHandler(timerControl);
timer.Interval = 5000;
timer.AutoReset = true;
timer.Enabled = true;
}

    private void timerControl(object sender, ElapsedEventArgs e)
    {
        if (ss.Length>5)
        {
            timer.Stop();
        }
        else
        {
                        //通知主线程去  添加执行ss+="a";
                        //这个timer线程 如何去通知主线程 
        }
    }
ui

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
system.timers.timer不执行的问题

本人写了个定时执行程序,在本地调试运行是没有问题。但发布至测试服务器中后,timer的委托方法永远不会执行。 private static system.timers.timer srvTimer = new System.Timers.Timer(); srvTimer.Interval = 300000; srvTimer.Elapsed +=new System.Timers.ElaspsedEventHandler(srvTimer_Elapsed); srvTimer.AutoReset = true; srvTimer.Enabled=true; srvTimer.Start(); void srvTimer_Elapsed() { …… } 请高手说明一下可能的原因。非常急,谢谢了!

System.Timers.Timer 这个定义的线程是前台线程还是后台线程?

System.Timers.Timer 这个定义的线程是前台线程还是后台线程?

c# 计时器 System.Timers.Timer

第一次计时正确,从第二次计时开始明显快了很多,比如第一次计时2.25秒,第二次4.32秒, 第三次7.03秒,越来越快,这是怎么回事。代码如下: private void button1_Click(object sender, EventArgs e) { if (button1.Text == "开始检查") { Thread t1 = new Thread(new ThreadStart(time1start)); t1.Start(); //time1.Start(); Thread t2 = new Thread(new ThreadStart(checkstart)); t2.Start(); } else if (button1.Text == "重新检查") { t = 0; //如何正在计时,则先停止再清零,否则直接清零 if (this.timer1.Enabled == true) { this.timer1.Enabled = false; textBox1.Text = GetAllTime(t); } else { textBox1.Text = GetAllTime(t); } Thread t1 = new Thread(new ThreadStart(time1start)); t1.Start(); //time1.Start(); Thread t2 = new Thread(new ThreadStart(checkstart)); t2.Start(); button1.Text = "重新检查"; } } private void time1start() { //设置timer可用 timer1.Enabled = true; //设置timer timer1.Interval = 10; //设置是否重复计时,如果该属性设为False,则只执行timer_Elapsed方法一次。 timer1.AutoReset = true; timer1.Elapsed += new ElapsedEventHandler(timer_Elapsed); } private void checkstart() { conventionlabel3Click(null, null); conventionlabel4Click(null, null); conventionlabel5Click(null, null); timer1.Enabled = false; if (button1.Text == "开始检查") { button1.Text = "重新检查"; } }

system.timers.timer操作剪贴板报错

c#中的system.timers.timer操作剪贴板报错 在可以调用 ole 之前,必须将当前线程设置为单线程单元(sta)模式。请确保您的 main 函数带有 stathreadattribute 标记。 只有将调试器附加到该进程才会引发此异常。 网上看了一下设置main函数是已经设置的,线程的ApartmentState 属性,timer又没有。有没有大神能够解惑

【C#】Timer.Elapsed触发的方法里怎么传进去参数?

如图,我希望timer.Elapsed能触发KeyAction,那样我就可以用KeyAction里的方法获取键盘输入内容了。但因为keyPress是我自己声明的,所以参数跟Timer.Elapsed的不一样。我想知道怎么让报错的block1成功传进KeyAction ![图片说明](https://img-ask.csdn.net/upload/201908/19/1566183111_915807.png) ``` using System; using System.Timers; namespace _8._19 { class Program { static void Main(string[] args) { Timer timer = new Timer(); timer.Interval = 500; KeyBord keyBord = new KeyBord(); Block block1 = new Block(); keyBord.KeyPress += block1.BlockMove; timer.Elapsed += keyBord.TimerAction; Console.Read(); } } public class Block { public void BlockMove(Block block, KeyEventArgs e) { Console.WriteLine("block move");//预留方法的位置 Console.WriteLine(e.KeyInput); } } class KeyBord { public event KeyEventHandler KeyPress; public void KeyAction(Block block, KeyEventArgs e) { if (Console.KeyAvailable) { ConsoleKey key = Console.ReadKey().Key; if (key == ConsoleKey.D) { e.KeyInput = ConsoleKey.D; Console.WriteLine(" e.KeyInput = ConsoleKey.D;");//预留方法的位置 } this.KeyPress.Invoke(block, e); } } public void TimerAction(object sender, ElapsedEventArgs e) { this.KeyAction(block1, new KeyEventArgs()); } } public delegate void KeyEventHandler(Block block, KeyEventArgs e); public class KeyEventArgs { public ConsoleKey KeyInput { get; set; } } } ```

c#中的三个timer和thread引发异常时的处理

程序(exe)运行过程中,在没有catch的情况下,发生了异常 form的timer,弹出异常信息框; threading的timer和thread,直接导致整个程序停止运行,没有弹出异常信息框; System.Timers.Timer,则是什么事情也没发生。 请问导致这三种情况的原因在哪里,和调试器、未处理异常的侦听器有关么?

C#、.NET中如何在Global.asax中实现页面跳转,急急急

C#、.NET中如何在Global.asax中实现页面跳转?用于定时器,每隔一段时间就跳转 ``` protected void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 System.Timers.Timer myTimer = new System.Timers.Timer(60000);//一分钟 myTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent); myTimer.Interval = 60000; myTimer.Enabled = true; } //你要定时执行的代码放这里 void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e) { 在这里实现地址跳转,但是如何跳转??????? } ```

定时器委托回调函数怎么实现传递两个参数

public System.Timers.Timer trime; //定时器 public int count=0; //定时器变量,累加计数时用到 public void A(string a) { //主窗体中会调用A方法,给出a的值。 trime = new System.Timers.Timer(1000); trime.AutoReset = true;//执行一次false,一直执行true; trime.Enabled = true;//是否执行Elapsed事件 trime.Elapsed += new System.Timers.ElapsedEventHandler(TimerUp); } public void TimerUp(object sender, ElapsedEventArgs e) { count++; try { foreach (System.Windows.Forms.Control control in mapPictureBox.Controls) { //////问: 怎么传递参数,用来代替判断条件中的“1” if (control.Text.Equals("1")) //控件名称如果为a,则a闪烁 { this.Invoke((MethodInvoker)delegate { if (count % 2 == 0) { control.BackColor = System.Drawing.Color.Red; } else { control.BackColor = System.Drawing.Color.Yellow; } }); } } HasAlert = true; } catch { } } 请各位大神指点

c# windows 服务程序 内存越来越大

private static System.Timers.Timer timer= new System.Timers.Timer(); private static int inTimer = 0; private static int time = 1; public Service1() { InitializeComponent(); timer.Interval = time * 60 * 1000;//默认每1分钟执行一次 timer.Enabled = true; timer.Elapsed += new System.Timers.ElapsedEventHandler(TimedEvent); timer.AutoReset = true; } private void TimedEvent(object sender, System.Timers.ElapsedEventArgs e) { 读取表数据, 循环修改, // GC.Collect(); //GC.WaitForPendingFinalizers(); }

如何在线程上使用timer来做一个定时器 in VB.NET

代码如下。思路是这样的:在线程中使用threading.timer,1ms执行一次,使GLO_TICK++。Calculate_Interval 用来计算间隔时间。 实际上TimerTask不是1ms执行一次,这是为什么? ``` Module Module1 Class StateObjClass ' Used to hold parameters for calls to TimerTask Public SomeValue As Integer Public TimerReference As System.Threading.Timer Public TimerCanceled As Boolean Public GLO_TICK As Long End Class Public StateObj As New StateObjClass Public long_Temp1 As Long Public int16_temp1 As Int16 Sub RunTimer() StateObj.TimerCanceled = False StateObj.SomeValue = 1 Dim TimerDelegate As New Threading.TimerCallback(AddressOf TimerTask) ' Create a timer that calls a procedure every 2 seconds. ' Note: There is no Start method; the timer starts running as soon as ' the instance is created. Dim TimerItem As New System.Threading.Timer(TimerDelegate, StateObj, _ 0, 1) StateObj.TimerReference = TimerItem ' Save a reference for Dispose. Dim a As Boolean = False Dim state As Int16 While True ' Run for ten loops. 'System.Threading.Thread.Sleep(1000) ' Wait one second. Select Case state Case 0 If a Then long_Temp1 = StateObj.GLO_TICK Else a = True long_Temp1 = StateObj.GLO_TICK Console.WriteLine("a=" & a & Now) End If state = 1 Exit Select Case 1 Calculate_Interval(long_Temp1, int16_temp1) If int16_temp1 > 100 Then a = False long_Temp1 = StateObj.GLO_TICK Console.WriteLine("a=" & a & Now) state = 2 End If Exit Select Case 2 Calculate_Interval(long_Temp1, int16_temp1) If int16_temp1 > 100 Then a = True long_Temp1 = StateObj.GLO_TICK Console.WriteLine("a=" & a & Now) state = 1 End If Exit Select End Select End While StateObj.TimerCanceled = True ' Request Dispose of the timer object. End Sub Sub TimerTask(ByVal StateObj As Object) Dim State As StateObjClass = CType(StateObj, StateObjClass) If State.TimerCanceled Then ' Dispose Requested. System.Diagnostics.Debug.WriteLine("Done " & Now) State.TimerReference.Dispose() End If System.Threading.Interlocked.Increment(State.GLO_TICK) End Sub Sub Main() RunTimer() Console.Read() End Sub Function Calculate_Interval(ByVal IntervalStart As Long, ByRef Interval_ms As Int16) As Int16 Interval_ms = Convert.ToInt16(StateObj.GLO_TICK - IntervalStart) Return Interval_ms End Function End Module ```

C#的winform中对于Form窗体的Timer控件问题?

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

c# winfrom 为什么计时器停止不了 看下面代码

``` private void comYouhua_CheckedChanged(object sender, EventArgs e) { System.Timers.Timer t = new System.Timers.Timer(10000); //实例化Timer类,设置间隔时间为10000毫秒; if (comYouhua.Checked == true) { t.Elapsed += new System.Timers.ElapsedEventHandler(theout); //到达时间的时候执行事件; t.AutoReset = true; //设置是执行一次(false)还是一直执行(true); t.Enabled = true; //是否执行System.Timers.Timer.Elapsed事件; } else { t.Stop(); t.Dispose(); } } public void theout(object source, System.Timers.ElapsedEventArgs e) { OptimiZing Opz = new OptimiZing(); string opzbige = Opz.Optimi(); MessageBox.Show("a"); } ``` 为什么取消复选框事件 那个a还是会不断的输出来

使用钩子功能的C#程序运行十次左右后会失灵是什么原因

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace HookINCS { public partial class Form1 : Form { private Hook hook; public Form1() { InitializeComponent(); hook = Hook.GetInstance(); hook.OnKeyPress += new KeyEventHandler(OnKeyDown); hook.InstallKeyBoardHook(); } //截图功能 public static void Snap(object source, System.Timers.ElapsedEventArgs e) { int x = 300; int y = 200; int width = 500; int height = 500; Image image = new Bitmap(width, height); Graphics g = Graphics.FromImage(image); g.CopyFromScreen(x, y, 0, 0, new System.Drawing.Size(width, height)); image.Save(@"C:\Users\q1120\Desktop\jietuzanliu\newpng.Png", System.Drawing.Imaging.ImageFormat.Png); } public static void phase2(object source, System.Timers.ElapsedEventArgs e) { MouseFlag.MouseLefClickEvent(380, 340, 0); } private void OnKeyDown(object sender, KeyEventArgs e) { textBox1.Text = e.KeyCode.ToString(); if (textBox1.Text == "Return") { //定时器 System.Timers.Timer t = new System.Timers.Timer(12700); t.Elapsed += new System.Timers.ElapsedEventHandler(Snap); t.AutoReset = false; t.Enabled = true; //等待12秒 System.Threading.Thread.Sleep(13000); // 图像处理 Bitmap bmp = new Bitmap(@"C:\Users\q1120\Desktop\jietuzanliu\newpng.Png"); for (int i = 1; i < 400; i++) { for (int j = 1; j < 400; j++) { Color col = bmp.GetPixel(i, j); if (col.R < 200 && col.G > 200 && col.B < 120) { MouseFlag.MouseLefClickEvent(480, 460, 0); System.Timers.Timer t1 = new System.Timers.Timer(23000); t1.Elapsed += new System.Timers.ElapsedEventHandler(phase2); t1.AutoReset = false; t1.Enabled = true; break; } } } textBox1.Text = ""; bmp.Dispose(); } } } } 刚学C#写的非常粗糙,但是程序是可以正常运行的,功能也都能实现,但是当运行十次左右后程序就无法再获得enter键按下的消息,这应该是什么原因

【求大神】c#winform图中曲线不能往旁边移动

![图片说明](https://img-ask.csdn.net/upload/201706/07/1496820060_777666.png) ``` public Form1() { InitializeComponent(); } System.Timers.Timer t = new System.Timers.Timer(); private void Form1_Load(object sender, EventArgs e) { t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed); t.Interval = 200; t.Start(); } void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { Random random = new Random(); DateTime t = DateTime.Now; this.plot1.Channels[0].AddXY(t, random.NextDouble() * 10); } ``` 随机数是一个一个产生的,但因为x轴的x没变,所以变成了一条平行于y轴的直线。问题是我的x明明就是当前时间,也就是说一直在变。求大神不吝赐教。

.net定时任务如何实现?

我用的是网上提供的方法: 1. 在Global.asax文件中 的 Application_Start 中定义一个线程 void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码//定义一个线程 System.Threading.Thread LoadServiceData = new System.Threading.Thread(new System.Threading.ThreadStart(LoadFromWebservice)); LoadServiceData.Start(); } 2.线程中调用的方法 private void LoadFromWebservice() { //定义一个定时器,并开启和配置相关属性 System.Timers.Timer Wtimer = new System.Timers.Timer(1000);//执行任务的周期 Wtimer.Elapsed += new System.Timers.ElapsedEventHandler(Wtimer_Elapsed); Wtimer.Enabled = true; Wtimer.AutoReset = true; } public void Wtimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { // 得到 hour minute second 如果等于某个值就开始执行某个程序。 int intHour = e.SignalTime.Hour; int intMinute = e.SignalTime.Minute; int intSecond = e.SignalTime.Second; // 定制时间; 比如 在10:30 :00 的时候执行某个函数(我想设置为每天00:00:00执行) int iHour = 00; int iMinute =00; int iSecond = 00; // 设置 每天的10:30:00开始执行程序 if (intHour == iHour && intMinute == iMinute && intSecond == iSecond) { 执行SQL语句 } } 这是网上实现解决IIS应用程序池自动回收的问题 void Application_End(object sender, EventArgs e)  { System.Threading.Thread.Sleep(1000);        string RequestURL = "http://www.test.com/default.aspx"; //这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start System.Net.HttpWebRequest __HttpWebRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(RequestURL); System.Net.HttpWebResponse __HttpWebResponse = (System.Net.HttpWebResponse)__HttpWebRequest.GetResponse(); System.IO.Stream __rStream = __HttpWebResponse.GetResponseStream();//得到回写的字节流        //当不再需要计时器时,请使用 Dispose 方法释放计时器持有的资源。 __rStream.Close(); __rStream.Dispose();   } 用的是阿里的虚拟空间,发现一次都没有执行,是什么原因呢?

提示重载与委托不匹配,怎么弄啊?

新手不懂,求解,非常感谢!!! public void Star() { this._food = GetFood();//生成一个食物 //初始化计时器 timerBlock = new System.Timers.Timer(_sqeed [this._level]); timerBlock.Elapsed += new System.Timers.ElapsedEventHandler(OnBlockTimedEvent); timerBlock.AutoReset = true; timerBlock.Start(); } 错误 1 “OnBlockTimedEvent”的重载均与委托“System.Timers.ElapsedEventHandler”不匹配 E:\Practice\MySnake\MySnake\Palette.cs 44 35 MySnake

请问c# winform中的Timer控件设置一个较小的interval会错过某些时间节点吗?

![图片说明](https://img-ask.csdn.net/upload/201908/05/1564992808_261857.png) ## 如果在Timer中设置Interval为较小的间隔。 ## 然后在执行时检测在某个时间点执行某个方法。会不会错过时间点。 if(datetime.now == 某个时间点){ //do something( ); }

C# 讀串口為何Timer會死掉

讀串口的程序死掉,有打計數器,計數器在20-30分鐘不等會停止跳動。 一開始懷疑是GC回收了Timer,使用了保活,不行; 後來懷疑系統回收了中間變量,使用了微軟的TryStartNoGCRegion, 不行; 不接串口時,計數器單獨放一個晚上都沒事; 串口使用C語言讀取,2個小時沒事。 讀串口的部分查閱了微軟標準的寫法,讀寫的buffer每次都是有清除的。 請大神指點,放久了,為何Timer計數會死掉。 ``` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Threading; using System.Runtime.InteropServices; using System.IO; using MES.Util; using System.Runtime; namespace MES.Operation { public partial class Suckion : Form { [System.Security.SecurityCritical] public static bool TryStartNoGCRegion; public static SerialPort serialPort = null; public Suckion() { InitializeComponent(); } public static string[] SerialPortNames { get { string[] serialports = SerialPort.GetPortNames(); Array.Sort(serialports, new Comparison<string>( delegate (string x, string y) { if (x.Length > 3 && y.Length > 3) { string index1 = x.Substring(3); string index2 = y.Substring(3); try { int n1 = Convert.ToInt32(index1); int n2 = Convert.ToInt32(index2); return n1 - n2; } catch { } } return 0; })); return serialports; } } System.Timers.Timer t = new System.Timers.Timer(1500); private void Suckion_Load(object sender, EventArgs e) { //comboBox1.Items.AddRange(SerialPortNames); //comboBox1.SelectedIndex = 0; label5.Text = Util.PublicVar.UserID; label3.Text = Util.PublicVar.Line; //打開串口 serialPort = new SerialPort(); serialPort.PortName = "COM1"; serialPort.BaudRate = Convert.ToInt32(9600); serialPort.Parity = Parity.None; serialPort.DataBits = Convert.ToInt32(8); serialPort.StopBits = StopBits.One; serialPort.Handshake = Handshake.None; serialPort.WriteTimeout = 200; serialPort.ReadTimeout = 200; if (serialPort.IsOpen == false) { serialPort.Open(); } Query(); //異步線程定時器 t.Elapsed += new System.Timers.ElapsedEventHandler(GetSuctionValue);//到达时间的时候执行事件; t.AutoReset = true;//设置是执行一次(false)还是一直执行(true); t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件; //GC.KeepAlive(t); } private void Query() { string sql = @"SELECT TOP 50 bi.Line 產線 ,bi.Main 主機 ,bi.SuctionValue 吸力 ,case when bi.SuctionValue is null then '' when bi.SuctionValue<-7 and bi.SuctionValue>-15 then 'OK' else 'NG' end 判定結果 ,CONVERT(varchar(100), bi.SuctionTime, 20) 吸力上傳時間 FROM dbo.BindingInfo bi WHERE bi.Line='" + Util.PublicVar.Line + "' and bi.SuctionTime is not null ORDER BY bi.SuctionTime desc"; dataGridView1.DataSource = Util.SQLHelper.GetDataTable(sql); for (int i = 0; i < dataGridView1.RowCount; i++) { if (dataGridView1.Rows[i].Cells["判定結果"].Value.ToString() == "NG") { dataGridView1.Rows[i].DefaultCellStyle.ForeColor = Color.Red; } } } void GetSuctionValue(object source, System.Timers.ElapsedEventArgs e) { try { this.BeginInvoke(new TextOption(F));//invok 委托实现跨线程的调用 GC.KeepAlive(t); } catch(Exception ex) { File.AppendAllText(@"C:/Test.txt",ex.ToString()); } } delegate void TextOption();//定义一个委托 private void F() { try { label8.Text = (int.Parse(label8.Text) + 1).ToString(); serialPort.DiscardInBuffer(); byte[] b = new byte[] { 01, 03, 00, 00, 00, 02, 0xC4, 0x0B }; serialPort.Write(b, 0, 8); } catch (Exception) { } SerialPort sp = serialPort; sp.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived); } private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) { //开辟接收缓冲区 byte[] ReDatas = new byte[serialPort.BytesToRead]; //从串口读取数据 serialPort.Read(ReDatas, 0, ReDatas.Length); //实现数据的解码与显示 AddData(ReDatas); serialPort.DiscardOutBuffer(); } /// <summary> /// 解码过程 /// </summary> /// <param name="data">串口通信的数据编码方式因串口而异,需要查询串口相关信息以获取</param> public void AddData(byte[] data) { Thread.Sleep(1000); if (data.Length != 9) { return; } if (data[0].ToString() != "1") { return; } StringBuilder sb = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); byte[] b2 = new byte[4]; sb.Clear(); sb.AppendFormat("{0:x2}", data[3]); sb.AppendFormat("{0:x2}", data[4]); uint num = uint.Parse(sb.ToString(), System.Globalization.NumberStyles.AllowHexSpecifier); byte[] floatValue = BitConverter.GetBytes(num); int value = BitConverter.ToInt16(floatValue,0); try { label2.BeginInvoke(new Action( () => { if (value.ToString().Length < 5) { label2.Text = ((value * 0.1).ToString("0.0")); } } ) ); } catch (Exception ex) { MessageBox.Show(ex.ToString()); throw; } } private void ResultDisplay(string ResultString, Color color) { if (Result_1.Visible == true && Result_2.Visible == true) { Result_1.Text = ResultString; Result_1.ForeColor = color; Result_2.Visible = false; Result_2.Text = ""; } else if (Result_1.Visible == true && Result_2.Visible == false) { Result_1.Visible = false; Result_1.Text = ""; Result_2.Visible = true; Result_2.Text = ResultString; Result_2.ForeColor = color; } else if (Result_1.Visible == false && Result_2.Visible == true) { Result_2.Visible = false; Result_2.Text = ""; Result_1.Visible = true; Result_1.Text = ResultString; Result_1.ForeColor = color; } } private void button1_Click(object sender, EventArgs e) { //綁定 string sql = "UPDATE dbo.BindingInfo SET SuctionValue = '" + label2.Text.Trim() + @"',SuctionTime=getdate() WHERE Main = N'" + Main.Text.Trim() + "' and Line='" + Util.PublicVar.Line + "'"; if (Util.SQLHelper.ExecuteNonQuery(sql) > 0) { ResultDisplay("已上傳", Color.Black); } else { ResultDisplay("未上傳", Color.Red); } Main.Text = ""; Main.Focus(); Query(); } private void Main_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { F(); //檢查主機唯一性 string sql = "select count(ID) from dbo.BindingInfo where Main=N'" + Main.Text.Trim() + "'"; if ((int)Util.SQLHelper.ExecuteScalar(sql) == 0) { ResultDisplay("主機未掃碼", Color.Red); Main.Text = ""; Main.Focus(); return; } sql = "select count(ID) from dbo.BindingInfo where Main=N'" + Main.Text.Trim() + "' and DiPa is null"; if ((int)Util.SQLHelper.ExecuteScalar(sql) >= 1) { ResultDisplay("地扒未掃碼", Color.Red); Main.Text = ""; Main.Focus(); return; } ////檢查吸力工序是否有做 //sql = "select count(ID) from dbo.BindingInfo where Main=N'" + Main.Text.Trim() + "' and SuctionValue is not null"; //if ((int)Util.SQLHelper.ExecuteScalar(sql) >= 1) //{ // ResultDisplay("吸力已測試", Color.Red); // Main.Text = ""; // Main.Focus(); // return; //} //ResultDisplay("主機OK", Color.Black); ////Main.Focus(); sql = "UPDATE dbo.BindingInfo SET SuctionValue = '" + label2.Text.Trim() + @"',SuctionTime=getdate() WHERE Main = N'" + Main.Text.Trim() + "' and Line='" + Util.PublicVar.Line + "'"; if (Util.SQLHelper.ExecuteNonQuery(sql) > 0) { ResultDisplay("已上傳", Color.Black); } else { ResultDisplay("未上傳", Color.Red); } Main.Text = ""; Main.Focus(); Query(); } } [DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")] public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize); /// <summary>       /// 释放内存       /// </summary>       public static void ClearMemory() { GC.Collect(); GC.WaitForPendingFinalizers(); if (Environment.OSVersion.Platform == PlatformID.Win32NT) { SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1); } } [System.Security.SecurityCritical] public static void EndNoGCRegion() { if (GCSettings.LatencyMode == GCLatencyMode.NoGCRegion) GC.EndNoGCRegion(); } private void button2_Click(object sender, EventArgs e) { } } } ```

C# 多线程读写删除文件并绘制在picture上

namespace PictureSD { public partial class Form1 : Form { public Form1() { InitializeComponent(); } bool flag; bool flag2; private Object thisLock = new object(); ComputePic face; Thread ThreadSamp;// 图片 Bitmap bc1; Bitmap bc2; Graphics gc1; private string dir = @"C:\Users\Teefan\Desktop\C#聊天\NEWFACElog\Camera\Camera\bin\Debug\Images\7.jpg"; private string dir2 = @"C:\Users\Teefan\Desktop\C#聊天\NEWFACElog\Camera\Camera\bin\Debug\Images"; private void button1_Click(object sender, EventArgs e) { System.Drawing.Image img= System.Drawing.Image.FromFile(dir);// 读7号图片测试 Bitmap imgBit = new Bitmap(img); SaveBit(imgBit, dir2, 2, "jpg");//存2号 imgBit.Dispose(); if (face == null) { ThreadSamp = new Thread(createSamp); // 计算人脸 ThreadSamp.IsBackground = true; ThreadSamp.Start(); } ThreadSamp.Join(); bc1.Dispose(); gc1.Dispose(); string img2 = dir2 + "/" + 2.ToString() + ".jpg"; File.Delete(img2); } class ComputePic { public int weight; public int height; public ComputePic(int a,int b) { weight = a; height = b; } } private void createSamp() { flag2 = false; face = new ComputePic(pictureBox1.Width, pictureBox1.Height); //假定在计算 bc1 = new Bitmap(dir2 + "/" + "2.jpg"); gc1 = Graphics.FromImage(bc1); RectangleF rect1 = new RectangleF(10, 20, face.weight++, face.height++); gc1.DrawImage(bc1, 0, 0, rect1, GraphicsUnit.Pixel); pictureBox1.Invoke((MethodInvoker)delegate //操作其他控件的语句 { pictureBox1.Image = bc1; pictureBox1.Refresh(); }); face = null; } private bool SaveBit(Bitmap bitmap, string path, int num, string kind) { string img = path + "/" + num.ToString() + "." + kind; bitmap.Save(img); return flag = true; } private void timer1_Tick(object sender, EventArgs e) { // button1_Click(button1, null); } private void button2_Click(object sender, EventArgs e) { System.Timers.Timer t = new System.Timers.Timer(2000); //实例化Timer类,设置间隔时间为10000毫秒; t.Elapsed += new System.Timers.ElapsedEventHandler(button1_Click); //到达时间的时候执行事件; t.AutoReset = true; //设置是执行一次(false)还是一直执行(true); t.Enabled = true; } } } 是这样的,我做了一个界面想实现一个功能,相当于读7号图片,存时命名为2号,然后利用多线程计算2号图片,得到坐标,在绘制picture上,最后删除2号图片,再读7号,在2号计算、坐标、绘制。基本就是这个顺序不要乱,可是我琢磨几天了,要么gdi错误,要么bc1对象被别处引用,我不知道我这样的顺序应该怎么实现!或许很简单,可是我琢磨好久了,真心求教多线程而且能做到不会冲突的高手,我的代码只能基本实现图片删除,不能体现在picture画的样子刷新上!

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景 在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧… 本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。 二、步骤 2.1 定位 定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。 2.1.1 工具监控 就工具而言,推荐使用 arthas ,用到的是 trace 命令 具体安装步骤很简单,大家自行研究。 我的使用步骤是...

学历低,无法胜任工作,大佬告诉你应该怎么做

微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的,考上了大学但没去成,主要是因为当时家里经济条件不太允许。 打工了三年后想学一门技术,就去培训了。培训的学校比较垃圾,现在非常后悔没去正规一点的机构培训。 去年 11 月份来北京找到了一份工...

JVM内存结构和Java内存模型别再傻傻分不清了

JVM内存结构和Java内存模型都是面试的热点问题,名字看感觉都差不多,网上有些博客也都把这两个概念混着用,实际上他们之间差别还是挺大的。 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关,本文针对这两个总是被混用的概念展开讲解。 JVM内存结构 JVM构成 说到JVM内存结构,就不会只是说内存结构的5个分区,而是会延展到整个JVM相关的问题,所以先了解下

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

Google 与微软的浏览器之争

浏览器再现“神仙打架”。整理 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)从 IE 到 Chrome,再从 Chrome 到 Edge,微软与...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

搜狗输入法也在挑战国人的智商!

故事总是一个接着一个到来...上周写完《鲁大师已经彻底沦为一款垃圾流氓软件!》这篇文章之后,鲁大师的市场工作人员就找到了我,希望把这篇文章删除掉。经过一番沟通我先把这篇文章从公号中删除了...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

立即提问
相关内容推荐