线程调用BeginInvoke

2024-02-29 14:32
文章标签 线程 调用 begininvoke

本文主要是介绍线程调用BeginInvoke,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

线程异步调用

Thread objThread = new Thread(new ThreadStart(delegate
            {
                Dispatcher.BeginInvoke(new Action(() =>--解决调用线程必须为 STA,因为许多 UI 组件都需要的问题
                {
                    ReportViewer rp = ReportingServiceHelper.GetReportView(reportName, null, true, true);
                    rp.RefreshReport();
                    CurrentView = ReportingServiceHelper.GetFormHost<ReportViewer>(rp);
                }));

            }));
            objThread.Start();

 

http://blog.csdn.net/yl2isoft/article/details/11711833

 http://www.cnblogs.com/nokiaguy/archive/2008/07/13/1241817.html

http://blog.csdn.net/razorluo/article/details/7814670

 

http://www.111cn.net/net/160/42786.htm

http://www.sufeinet.com/thread-3707-1-1.html

 

调用控件的BeginInvoke实现异步

/// <summary>
         /// 线程调用BeginInvoke
         /// </summary>
         private void ThreadBeginInvoke()
         {
             listBox1.Items.Add("--begin--");
             new Thread(() =>
             {
                 Thread.CurrentThread.Name = "ThreadBeginInvoke";
                 Thread.Sleep(10000);
                 string temp = "Before!";
                 listBox1.BeginInvoke(new Action(() =>
                 {
                     this.listBox1.Items.Add(temp + ":" + Thread.CurrentThread.Name);
                 }));
                 temp += "After!";
             }).Start();
             Thread.Sleep(1000);
             listBox1.Items.Add("--end--");
         }

 

委托实现异步

  public delegate int AddOp(int x, int y);

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("******* 委托异步线程 两个线程“同时”工作 *********");

            //显示主线程的唯一标示

            Console.WriteLine("调用Main()的主线程的线程ID是:{0}."Thread.CurrentThread.ManagedThreadId);

            //将委托实例指向Add()方法

            AddOp pAddOp = new AddOp(Add);

            //开始委托次线程调用。委托BeginInvoke()方法返回的类型是IAsyncResult,

            //包含这委托指向方法结束返回的值,同时也是EndInvoke()方法参数

            IAsyncResult iftAR = pAddOp.BeginInvoke(10, 10, nullnull);

            Console.WriteLine(""nMain()方法中执行其他任务........"n");

            int sum = pAddOp.EndInvoke(iftAR);

            Console.WriteLine("10 + 10 = {0}.", sum);

            Console.ReadLine();

        }

        //求和方法

        static int Add(int x, int y)

        {

            //指示调用该方法的线程ID,ManagedThreadId是线程的唯一标示

            Console.WriteLine("调用求和方法 Add()的线程ID是: {0}."Thread.CurrentThread.ManagedThreadId);

            //模拟一个过程,停留5秒

            Thread.Sleep(5000);

            int sum = x + y;

            return sum;

        }

    }

}

 

 

 

 

这篇关于线程调用BeginInvoke的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759137

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Java多线程父线程向子线程传值问题及解决

《Java多线程父线程向子线程传值问题及解决》文章总结了5种解决父子之间数据传递困扰的解决方案,包括ThreadLocal+TaskDecorator、UserUtils、CustomTaskDeco... 目录1 背景2 ThreadLocal+TaskDecorator3 RequestContextH

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

redis防止短信恶意调用的实现

《redis防止短信恶意调用的实现》本文主要介绍了在场景登录或注册接口中使用短信验证码时遇到的恶意调用问题,并通过使用Redis分布式锁来解决,具有一定的参考价值,感兴趣的可以了解一下... 目录1.场景2.排查3.解决方案3.1 Redis锁实现3.2 方法调用1.场景登录或注册接口中,使用短信验证码场

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C