C# 线程更新ui

摘要:
本节包含两个示例。这些示例在UI线程的TextBlock中显示其输出。要从回调线程访问TextBlock,这些示例使用Dispatcher属性获取TextBlock的Dispatcher对象,然后使用跨线程调用Dispatcher BeginInvoke方法。有关创建线程的更多示例,请参阅创建线程和在启动时传递数据。有关使用关键部分协调线程操作的示例,请参阅监视器。示例1以下示例演示如何创建执行静态方法的线程。C#VBusing系统;使用系统。穿线;publicclassExample{privatestaticSystem.Windows.Controls.TextBlockoutputBlock;publicstaticoidDemo{Example.outputBlock=outputBlock}//要开始使用静态线程过程进行读取,请在创建ThreadStart//委托时使用//类名和方法名。C#将方法名扩展到相应的//委托创建ionsyntax://NewThreadStart//ThreadnewThread=newThread ; 新线程。Start();}//模拟工作。要在UI线程上与对象通信,请获取UI对象的//调度窗口。使用Dispatcher对象的//BeginInvoke方法对将在UI线程上运行的合法元素进行排队,//然后可以安全地访问UI元素,如TextBlock.privatestaticvoidDoWork(){outputBlock.Datcher.BeginInvoker;}}/*此代码示例生成以下输出:Hello from astatic thread procedure*/示例2以下示例演示如何创建执行实例方法的线程。

本部分包含两个示例。 第一个示例演示如何创建执行静态方法的线程。 第二个示例演示如何创建执行实例方法的线程。

这些示例在 UI 线程上的 TextBlock 中显示它们的输出。 为了从回调线程访问 TextBlock,这些示例使用 Dispatcher 属性来获取 TextBlock 的 Dispatcher 对象,然后使用 Dispatcher.BeginInvoke 方法进行跨线程调用。

有关创建线程的更多示例,请参见启动时创建线程并传递数据 有关使用等待句柄协调线程操作的示例,请参见 EventWaitHandle 有关使用临界区(在 C# 中为 lock,在 Visual Basic 中为 SyncLock)协调线程操作的示例,请参见Monitor 有关如何使用线程池线程的示例,请参见 BackgroundWorkerThreadPool 和 Timer

示例 1

下面的示例演示如何创建执行静态方法的线程。

注意 说明:

若要运行此示例,请参见生成使用 Demo 方法和 TextBlock 控件的示例

 
using System;
using System.Threading;

public class Example
{
   private static System.Windows.Controls.TextBlock outputBlock;

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      Example.outputBlock = outputBlock;

      // To start a thread using a static thread procedure, use the
      // class name and method name when you create the ThreadStart
      // delegate. C# expands the method name to the appropriate 
      // delegate creation syntax:
      //    New ThreadStart(Example.DoWork)
      //
      Thread newThread = new Thread(Example.DoWork);
      newThread.Start();
   }

   // Simulate work. To communicate with objects on the UI thread, get the 
   // Dispatcher for one of the UI objects. Use the Dispatcher object's 
   // BeginInvoke method to queue a delegate that will run on the UI thread,
   // and therefore can safely access UI elements like the TextBlock.
   private static void DoWork()
   {
      outputBlock.Dispatcher.BeginInvoke(delegate () { 
         outputBlock.Text += "Hello from a static thread procedure.\n"; 
      });
   }
}

/* This code example produces the following output:

Hello from a static thread procedure.
 */


示例 2

下面的示例演示如何创建执行实例方法的线程。

注意 说明:

若要运行此示例,请参见生成使用 Demo 方法和 TextBlock 控件的示例

 
using System;
using System.Threading;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // To start a thread using an instance method for the thread 
      // procedure, use the instance variable and method name when 
      // you create the ThreadStart delegate. C# expands the object
      // reference and method name to the appropriate delegate 
      // creation syntax:
      //    New ThreadStart(AddressOf w.DoMoreWork)
      //
      Work w = new Work();
      w.Data = 42;
      w.Output = outputBlock;

      Thread newThread = new Thread(w.DoMoreWork);
      newThread.Start();
   }
}

public class Work
{
   public int Data;
   public System.Windows.Controls.TextBlock Output;

   // Simulate work. To communicate with objects on the UI thread, get the 
   // Dispatcher for one of the UI objects. Use the Dispatcher object's 
   // BeginInvoke method to queue a delegate that will run on the UI thread,
   // and therefore can safely access UI elements like the TextBlock.
   public void DoMoreWork()
   {
      Output.Dispatcher.BeginInvoke(delegate () {
         Output.Text += String.Format("Instance thread procedure. Data={0}\n", Data);
      });
   }
}

// This code example produces the following output:
//
//Instance thread procedure. Data=42

免责声明:文章转载自《C# 线程更新ui》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python编码encode decode(解惑)oracle 中生成流水号 方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

jmeter监控内存,CPU等方法

当然,我们也可以选择本地进程下的远程进程来获取服务器的内存使用情况和其他信息。在文本框中输入需要测试的服务器的IP地址:port,然后在下面输入用户名和密码。单击“连接”以查看发生的情况。...

kvm虚拟机快照备份

kvm虚拟机默认使用原始图像格式,该格式具有最佳性能和最快速度。它的缺点是不支持一些新功能,例如映像、zlib磁盘压缩、AES加密等。接下来,启动kvm虚拟机快照备份的过程。查看虚拟机映像快照的版本查看当前虚拟机映像snapshot的版本。您可以看到它是最新的快照版本。...

Android Exception 10(server)' ~ Channel is unrecoverably broken and will be disposed!)

08-1119:22:35.028:W/MemoryDealer(2123):madvise(0x43e1600012288,MADV_REMOVE)返回操作不支持传输端点08-1119:22-35.038:W/InputDispatcher(2714):channel'4236b890com.tongyan.activi...

k8s集群上删除pod及service

删除k8s集群中的pod:找到pod的名称空间,并根据名称空间删除pod1。首先删除pod2,然后删除相应的部署。否则,删除pod是无用的。您还将看到pod,因为deployment.yaml文件中定义的副本数如下:delete the pod[root@test2~]#kubectlgetpod-njenkinsNAMEREADYSTATUSRESTART...

Android:在任务列表隐藏最近打开的app

//schemas.android.com/apk/res/android“package=”com.li.test“android:versionName=”1.0“&gt:targetSdkVersion=”23“/&gt:allowBackup=”true“android:icon=”@mipmap/ic_launcher“androi...

zlog 使用手册

Zlog是一个纯C日志函数库,具有高可靠性、高性能、线程安全性、灵活性和清晰的概念。Syslog是一个系统级的轮子,但它的速度慢,功能单调。Zlog比log4c更高效、更实用、更安全,它是用c编写的。Zlog使用了C99兼容的vsnprintf。...