博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 子线程与主线程通讯方法一
阅读量:4465 次
发布时间:2019-06-08

本文共 1363 字,大约阅读时间需要 4 分钟。

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

子线程结束后调用同步函数,向主线程发送时间字符串,改变主窗体的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); //通知主线程
}

转载于:https://www.cnblogs.com/xihong2014/p/10953210.html

你可能感兴趣的文章
SQL - SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)[转]...
查看>>
《learning hard C#学习笔记》读书笔记(20)异步编程
查看>>
动态创建Struct实例
查看>>
Jsp通过JDBC连接到SQL Server2008数据库遇到的几个问题
查看>>
idea 不能编译生成class文件
查看>>
javascript原生百叶窗
查看>>
单播组播和广播
查看>>
JSPatch - iOS 动态补丁
查看>>
eclipse设置和优化
查看>>
WinFrom玩转config配置文件
查看>>
IIS服务中五种身份验证
查看>>
c#网络编程-第一章
查看>>
paip.提升效率--僵尸代码的迷思
查看>>
Atitit 自动化gui 与 发帖机 技术
查看>>
Atitit.研发团队与公司绩效管理的原理概论的attilax总结
查看>>
编程模式之装饰模式(Decorator)
查看>>
MVC中关于 使用后台代码 检查 用户名是否已经被清册
查看>>
匿名函数
查看>>
nginx相关
查看>>
(各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)...
查看>>