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

子线程结束后调用同步函数,向主线程发送时间字符串,改变主窗体的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. 使用session存储数据

    @WebServlet("/reply") public class ReplyServlet extends HttpServlet { @Override protected ...

  2. window的pid为4的system进程占用80端口的解决办法

    1.taskkill /pid 4 /f 无法终止进程占用80端口的进程时,运行 net stop http(若是第一次运行不能终止所有服务,继续运行该命令)

  3. RookeyFrame 自定义数据源 返回统计查询后的视图

    核心:对返回的数据进行重写 功能是这样的:上传淘宝后台的订单文件,将订单文件里面的数据导入到系统,对导入后的订单数据进行统计后再显示. Order_File:用来存上传的订单文件,格式是****.cs ...

  4. LoadRunner学习目录

    已更新: 未更新: 1.loadrunner 11破解版及破解包 2.如何录制一个LR脚本 3.自定义loadrunner脚本

  5. mac 安装 pycharm

    下载安装 链接:https://pan.baidu.com/s/19Hm6yZPL_mOTVAb5YQBZKA 密码:j73n 激活码 56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1N ...

  6. CF1188B/E Count Pairs(数学)

    数同余的个数显然是要把\(i,j\)分别放到\(\equiv\)的两边 $ (a_i + a_j)(a_i^2 + a_j^2) \equiv k \bmod p $ 左右两边乘上\((a_i-a_j ...

  7. nodejs express cheerio request爬虫

    const express = require('express') const cheerio = require('cheerio') const request = require(" ...

  8. 2018-2019 20165226 Exp9 Web安全基础

    2018-2019 20165226 Exp9 Web安全基础 目录 一.实验内容说明及基础问题回答 二.实验过程 Webgoat准备 XSS攻击 ① Phishing with XSS 跨站脚本钓鱼 ...

  9. centos安装jdk1.8的三种方法

    一.手动解压安装包: 1.在user目录下新建java文件夹:   # cd /usr/   # mkdir java   # cd java 2.下载jdk1.8,进入http://www.orac ...

  10. JVM 接口初始化规则

    1.创建两个接口,MyParent5接口,MyChild5 接口继承自MyParent5接口 public class MyTest5 { public static void main(String ...