C#在新的线程中执行逻辑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace Thread
{
    public class example
    {
        public static void 本地刷新ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // 在新的线程中执行逻辑
            ThreadTool.ThreadRun(UpdateLocal);	
        }

        private static void UpdateLocal()
        {
            // 自定义处理逻辑
        }
    }

    public class ThreadTool
    {

        /// <summary>
        /// 定义委托接口处理函数,用于实时处理cmd输出信息
        /// </summary>
        public delegate void Method();

        /// <summary>
        /// 在新的线程中执行method逻辑
        /// </summary>
        public static void ThreadRun(Method method)
        {
            Thread thread = new Thread(delegate()
            {
                // 允许不同线程间的调用
                Control.CheckForIllegalCrossThreadCalls = false;

                // 执行method逻辑
                if (method != null) method();
            });

            thread.Priority = ThreadPriority.AboveNormal;           // 设置子线程优先级
            Thread.CurrentThread.Priority = ThreadPriority.Highest; // 设置当前线程为最高优先级
            thread.Start();
        }

    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#,在while循环显示窗体需要考虑到线程安全的问题,因为UI线程和后台线程是分离的,不能在后台线程直接访问UI元素。你需要使用Invoke方法来确保线程安全。以下是一个简单的示例代码: ```csharp private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(new ThreadStart(ShowForm)); thread.Start(); } private void ShowForm() { Form2 form2 = new Form2(); while (true) { if (this.IsDisposed) { break; } if (this.InvokeRequired) { this.Invoke(new MethodInvoker(() => form2.Show())); } else { form2.Show(); } Thread.Sleep(1000); } } ``` 在这个示例,当用户单击button1按钮时,一个线程将启动,并在该线程调用ShowForm方法。在ShowForm方法,我们创建并初始化了一个的Form2窗体,然后进入一个无限循环。循环检查当前窗体是否已经被释放,如果已经被释放,则跳出循环。接着,我们使用Invoke方法来将窗体显示操作转发到UI线程。在Invoke方法,我们使用了一个Lambda表达式来在UI线程执行窗体显示操作,这样可以避免在UI线程执行复杂的逻辑。注意,这里使用的是`form2.Show()`而不是`form2.ShowDialog()`,因为后者是模态显示窗体,会阻止用户与其他窗体进行交互。如果你需要模态显示窗体,可以使用`form2.ShowDialog()`。最后,我们调用Thread.Sleep方法来等待一段时间后再次显示窗体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值