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); //通知主線程
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM