线程异步调用

 private void format()//耗时方法
        {
            doing = true;           
            try
            {
                if (Do(mergestr, file1,0) == 0)
                {
                    int ret = Change(file1, colorring);
                    try
                    {
                        if (File.Exists(file2))
                        {
                            File.SetAttributes(file2, FileAttributes.Normal);
                        }
                    }
                    catch { }
                    File.Copy(colorring, file2,true);
                    _isover = ret == 0 ? true : false;
                }
                else
                {
                    _isover = false;
                }
            }
            catch
            {
                _isover = false;
            }
            over = true;
        }
        private void timer2_Tick(object sender, EventArgs e)//子线程
        {
            try
            {               
                timer2.Enabled = false;
                if (!doing)
                {
                    Thread th = new Thread(new ThreadStart(dosomething));
                    th.TrySetApartmentState(ApartmentState.STA);
                    th.IsBackground = true;
                    th.Start();
                }
            }
            catch
            {
                over = true;
            }  
        }
        private void dosomething()//异步调用
        {
            try
            {
                MethodInvoker mi = new MethodInvoker(format);
                mi.BeginInvoke(null, null);
            }
            catch
            { }
        }
        private void timer1_Tick(object sender, EventArgs e)//ui线程
        {
            if (over)
            {
                this.Close();
            }
            if (label2.Text.Length < 6)
            {
                label2.Text += ".";
            }
            else
            {
                label2.Text = "";
            }
        }
posted @   94cool  阅读(187)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2009年9月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10
点击右上角即可分享
微信分享提示