• C# 子线程与主线程通讯方法一


    最近在项目中要用到子线程运行结束向主线程通知的需求,利用线程上下文来实现线程之间的同步。

    子线程结束后调用同步函数,向主线程发送时间字符串,改变主窗体的label标签

    label标签改变事件触发处理函数,进行显示;

    代码如下:

    主窗体:

    public static MainForm comMainForm;    //其他类可以直接调用此窗体的控件

    public MainForm()
    {
    InitializeComponent();
    comMainForm = this;
    }

    //任务中心标签内容发生更新事件响应
    private void taskFreshFlag_TextChanged(object sender, EventArgs e)
    {
    labResult.Visible = true;
    labResult.Text = DateTime.Now.TimeOfDay.ToString();
    }

    工具类:

    public class WebServiceConnect
    {

      private static SynchronizationContext mainThreadSynContext;

    //此处修改为异步获取任务方式
    public static void GetTaskInfo(string taskInfoIn0)
    {
      mainThreadSynContext = SynchronizationContext.Current;     //当前线程上下文
      taskThread = new Thread(new ParameterizedThreadStart(webConnect));
      taskThread.Start(taskInfoIn0);
    }

    //回调函数
    private static void CallBack(object state)
    {
    //主线程报告信息
    MainForm.comMainForm.taskFreshFlag.Text = "task" + DateTime.Now.TimeOfDay.ToString();
    }

    public static void webConnect(object taskInfoIn)
    {
    try
    {
      string taskInfoIn0 = taskInfoIn.ToString();
      circle = false;
    }
    catch (Exception ex)
    {
      System.Net.WebException wex = ex as System.Net.WebException;
      if (connCount > 1)
    {
      circle = false;
      taskThread.Abort();
      System.Windows.Forms.MessageBox.Show("通讯未连接!");
      return;
    }
    }
    mainThreadSynContext.Post(new SendOrPostCallback(CallBack), null); //通知主线程
    }

  • 相关阅读:
    mybatis学习成长之路(一)
    badboy页面脚本发生错误,解决方案
    资料下载地址大全
    excel2003和excel2007文件的创建和读取
    文件的上传下载
    读取.properties的内容1
    Java的垃圾回收机制
    Bell数和Stirling数
    Catalan数计算及应用
    [算法]循环赛日程表
  • 原文地址:https://www.cnblogs.com/xihong2014/p/10953210.html
Copyright © 2020-2023  润新知