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

子线程结束后调用同步函数,向主线程发送时间字符串,改变主窗体的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# 子线程与主线程通讯方法一的更多相关文章

  1. WinForm 中使用 Action 子线程对主线程 控制进行访问

    /// <summary> /// 开启新线程执行 /// </summary> /// <param name="sender"></p ...

  2. [转]QT子线程与主线程的信号槽通信-亲测可用!

    近用QT做一个服务器,众所周知,QT的主线程必须保持畅通,才能刷新UI.所以,网络通信端采用新开线程的方式.在涉及到使用子线程更新Ui上的控件时遇到了点儿麻烦.网上提供了很多同一线程不同类间采用信号槽 ...

  3. Qt自己定义事件实现及子线程向主线程传送事件消息

    近期在又一次学习Qt的时候,由于要涉及到子线程与主线程传递消息,所以便琢磨了一下.顺便把有用的记录下来,方便自己以后查询及各位同仁的參考! 特此声明,本篇博文主要讲述有用的,也就是直接说明怎么实现,就 ...

  4. c# 子线程与主线程通信二

    之前写过使用线程上下文实现线程同步,今天利用子线程向主线程发送事件,实现子线程与主线程的同步 基本步骤 1.定义类 using System; using System.Collections.Gen ...

  5. 19 Handler 子线程向主线程发送信息

    案例一 Message创建三种方法: package com.example.day19_handler_demo1; import android.os.Bundle; import android ...

  6. C# 子线程调用主线程窗体的解决方法

    摘自其他人博客,自己试过确实解决问题.(如在自己定义的线程里面给textbox赋值) 由于Windows窗体控件本质上不是线程安全的.因此如果有两个或多个线程适度操作某一控件的状态(set value ...

  7. Android笔记(三十一)Android中线程之间的通信(三)子线程给主线程发送消息

    先看简单示例:点击按钮,2s之后,TextView改变内容. package cn.lixyz.handlertest; import android.app.Activity; import and ...

  8. Android中,子线程使用主线程中的组件出现问题的解决方法

    Android中,主线程中的组件,不能被子线程调用,否则就会出现异常. 这里所使用的方法就是利用Handler类中的Callback(),接受线程中的Message类发来的消息,然后把所要在线程中执行 ...

  9. Unity3d 创建线程 子线程与主线程通信

    创建子线程 一,不带参数 Thread   resourcesLoadThread=new Thread (this.resourceLoadTxt); resourcesLoadThread.Sta ...

随机推荐

  1. ES的入门学习

    ES的入门:ES的雇员文档的设计和实现功能 ES的存放中包括:索引,类型,文档,字段 PUT /megacorp/employee/1{{ "first_name" : " ...

  2. nginx配置静态资源:配置绝对路径

    nginx配置静态资源:配置绝对路径 项目都是html格式的文件,我的项目路径:E:\javaservice\nginx-1.15.7\html assets:静态资源 html:站点文件 uploa ...

  3. [Kubernetes] Defining a Pod with YAML

    1. Define a yml file: nginx.pod.yml: apiVersion: v1 kind: Pod metadata: name: my-nginx labels: app: ...

  4. Set的常用实现类HashSet和TreeSet

    Set HashSet public static void main(String[] args) { //不可以重复  并且是无序的  //自然排序  从A-Z  //eqauls从Object继 ...

  5. Win10 Subsystem Linux : Ubuntu 的root密码

    安装完Ubuntu后忽然意识到没有设置root密码, 不知道密码自然就无法进入根用户下.Ubuntu的默认root密码是随机的, 即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo ...

  6. PHP实现系统编程(一) --- 网络Socket及IO多路复用【网摘】

    一直以来,PHP很少用于socket编程,毕竟是一门脚本语言,效率会成为很大的瓶颈,但是不能说PHP就无法用于socket编程,也不能说PHP的socket编程性能就有多么的低,例如知名的一款PHP ...

  7. UOJ#470. 【ZJOI2019】语言 虚树,线段树合并

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ470.html 前言 做完情报中心来看这个题突然发现两题有相似之处然后就会做了. 题解 首先,我们考虑将所有答案点对分为两 ...

  8. 怎么判断是qq浏览器还是uc浏览器?

    这里我画红框的是不正确的,最好的办法就是打印出navigator.userAgent出来.uc浏览器检验是正确的.

  9. interior转换为interface

    在计算的过程中,我们想要将interior(内部面)转换为interface,操作如下:

  10. ICEM-管肋

    原视频下载地址:https://yunpan.cn/cMgkmd7u9ZPdC  访问密码 8a73