zoukankan      html  css  js  c++  java
  • 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); //通知主线程
    }

  • 相关阅读:
    c# 门禁随笔
    DataTable到Access
    C#文件上传
    C#操作文件
    JavaScript 全局封装
    jsavascript 目录的操作(摘抄)
    12-STM32 ADC原理
    11-STM32 高级定时器TIM1/8
    10-STM32 基本定时器TIM
    9-STM32 WWDG窗口看门狗
  • 原文地址:https://www.cnblogs.com/xihong2014/p/10953210.html
Copyright © 2011-2022 走看看