queueuserworkitem如何创建线程

queueuserworkitem  时间:2021-01-17  阅读:()

C# 多线程的使用。如何使用多线程?

你用线程池(ThreadPool)可以实现,也可以用线程(Thread)实现 for (int i = 0; i < int.Parse(times); i++) //number of threads { //Console.WriteLine("thread i = " + i); //Thread oThread = new Thread(new ParameterizedThreadStart(Beta)); bool FIL = fi == "1" ? true :false; para p = new para { Finished = (i == int.Parse(times) - 1), Xml = doc.InnerXml, URL = url, num_msgs_processed = i, num_msgs_sent = i, FI = FIL }; // Start the thread //oThread.Start(p); //oThread.Join(); ThreadPool.QueueUserWorkItem(Beta, p); }

c# Socket 多线程例子

使用ThreadStart委托来衍生三个新线程

using System; using System.Threading; namespace ThreadStartSampleCS { class Program { static void Main() { Thread newThread; ThreadStart threadMethod = new ThreadStart(DoWork); for (int counter = 1; counter < 4; counter++) { Console.WriteLine("Starting Thread {0}", counter); newThread = new Thread(threadMethod); newThread.Name = counter.ToString(); newThread.Start(); } } static void DoWork() { for (int counter = 1; counter < 11; counter++) { Console.WriteLine("Thread {0}: iteration {1}", Thread.CurrentThread.Name, counter); Thread.Sleep(1); } } } } 使用ParameterizedThreadStart委托来衍生三个新线程 using System; using System.Threading; namespace ParameterizedThreadStartSampleCS { class Program { static void Main() { Thread newThread; ParameterizedThreadStart threadMethod = new ParameterizedThreadStart(DoWork); for (int counter = 1; counter < 4; counter++) { Console.WriteLine("Starting Thread {0}", counter); newThread = new Thread(threadMethod); newThread.Name = counter.ToString(); newThread.Start(5); } } static void DoWork(object iterations) { for (int counter = 1; counter < (int)iterations + 1; counter++) { Console.WriteLine("Thread {0}: iteration {1}", Thread.CurrentThread.Name, counter); Thread.Sleep(1); } } } } 使用ThreadPool类从线程池中启动线程 using System; using System.Threading; namespace ThreadPoolSampleCS { class Program { static void Main(string[] args) { ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc)); Console.WriteLine("Main thread starts"); Thread.Sleep(10000); Console.WriteLine("Main thread exits."); } static void ThreadProc(Object stateInfo) { Console.WriteLine("Hello from the thread pool. I will count from 1 to 100"); for (int counter = 1; counter < 101; counter++) { Console.WriteLine(counter); Thread.Sleep(500); } } } } 实现IAsyncResult接口和AsyncCallback委托 using System; using System.Threading; namespace AsynCallbackSampleCS { class Program { delegate int IntAsyncDelegate(int number); static IntAsyncDelegate aDelegate; static int i(int number) { if (number < 1) return 0; else if (number == 1 || number == 2) return number; else return i(number - 2) + i(number - 1); } static void DisplayResult(IAsyncResult ar) { int result = aDelegate.EndInvoke(ar); Console.WriteLine("Elemet number {0} in the i series is {1}", ar.AsyncState.ToString(), result); } static void Main(string[] args) { aDelegate = new IntAsyncDelegate(i); AsyncCallback callback = new AsyncCallback(DisplayResult); Console.Write("Enter a number: "); int number = int.Parse(Console.ReadLine()); aDelegate.BeginInvoke(number, callback, number); Console.WriteLine("wait while we process your request"); Thread.Sleep(5000); } } } 通过异步调用迁移线程的执行上下文 using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Security.Principal; using System.Threading; namespace ExecutionHostSampleCS { class Program { [DllImport("advapi32.dll")] private static extern bool LogonUser( String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken); static void Main() { System.IntPtr pToken; //请将LogonUser方法中的用户名、域名、密码替换成可以登陆本机的值。

if (LogonUser("用户名", "域名", "密码", 2, 0, out pToken)) { WindowsIdentity.Impersonate(pToken); DisplayContext("Main"); ThreadPool.QueueUserWorkItem(Callback, null); ExecutionContext ec = ExecutionContext.Capture(); ExecutionContext.SuppressFlow(); ThreadPool.QueueUserWorkItem(Callback, null); ContextCallback cb = new ContextCallback(Callback); ExecutionContext.Run(ec, cb, 0); ThreadPool.QueueUserWorkItem(Callback, null); ExecutionContext.RestoreFlow(); ThreadPool.QueueUserWorkItem(Callback, null); pToken = IntPtr.Zero; } Console.ReadLine(); } static void Callback(object o) { DisplayContext("Callback"); } static void DisplayContext(string s) { System.Console.WriteLine(s + " Thread#{0} Current user is {1}", Thread.CurrentThread.ManagedThreadId, WindowsIdentity.GetCurrent().Name); } } } 实现SynchronizationContext类和SendOrPostCallback委托 using System; using System.Threading; namespace SynchronizationContextSampleCS { class ount { public decimal balance; public void Deposit(decimal amount) { balance += amount; } public void Withdraw(decimal amount) { balance -= amount; } } class Program { static ount ount; static void Main(string[] args) { ount = new ount(); SendOrPostCallback deposit = new SendOrPostCallback(Deposit); SendOrPostCallback withdraw = new SendOrPostCallback(Withdraw); SynchronizationContext ctx = new SynchronizationContext(); ctx.Post(deposit, 500); ctx.Post(withdraw, 500); Console.ReadLine(); } static void Withdraw(object state) { Console.WriteLine("Withdraw: current balance = {0:C}", ount.balance); ount.Withdraw(decimal.Parse(state.ToString())); Console.WriteLine("Withdraw: new balance = {0:C}", ount.balance); } static void Deposit(object state) { Console.WriteLine("Withdraw: current balance = {0:C}", ount.balance); ount.Deposit(decimal.Parse(state.ToString())); Console.WriteLine("Deposit: new balance = {0:C}", ount.balance); } } }

queueuserworkitem是异步的还是同步的

串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。

在计算机和终端之间的数据传输通常是靠电缆或信道上的电流或电压变化实现的。

如果一组数据的各数据位在多条线上同时被传输,这种传输方式称为并行通信。

同步通信与异步通信区别: 1.同步通信要求接收端时钟频率和发送端时钟频率一致,发送端发送连续的比特流;异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。

2.同步通信效率高;异步通信效率较低。

3.同步通信较复杂,双方时钟的允许误差较小;异步通信简单,双方时钟可允许一定误差。

4.同步通信可用于点对多点;异步通信只适用于点对点。

如何创建线程

方式1:继承Thread类 步骤: 1):定义一个类A继承于Java.lang.Thread类. 2):在A类中覆盖Thread类中的run方法. 3):我们在run方法中编写需要执行的操作:run方法里的代码,线程执行体. 4):在main方法(线程)中,创建线程对象,并启动线程. (1)创建线程类

Ceranetworks顶级合作伙伴 香港E3 16G 299元 香港E5 32G 650元 美国E3 16G 650元

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

VoLLcloud:超便宜香港CMI大带宽vps-三网CMI直连-年付四免服务-低至4刀/月-奈飞

vollcloud LLC创立于2020年,是一家以互联网基础业务服务为主的 技术型企业,运营全球数据中心业务。致力于全球服务器租用、托管及云计算、DDOS安 全防护、数据实时存储、 高防服务器加速、域名、智能高防服务器、网络安全服务解决方案等领域的智 能化、规范化的体验服务。所有购买年付产品免费更换香港原生IP(支持解锁奈飞),商家承诺,支持3天内无条件退款(原路退回)!点击进入:vollclo...

PQ.hosting:香港HE/乌克兰/俄罗斯/荷兰/摩尔多瓦/德国/斯洛伐克/捷克vps,2核/2GB内存/30GB NVMe空间,€3/月

PQ.hosting怎么样?PQ.hosting是一家俄罗斯商家,正规公司,主要提供KVM VPS和独立服务器,VPS数据中心有香港HE、俄罗斯莫斯科DataPro、乌克兰VOLIA、拉脱维亚、荷兰Serverius、摩尔多瓦Alexhost、德国等。部分配置有变化,同时开通Paypal付款。香港、乌克兰、德国、斯洛伐克、捷克等为NVMe硬盘。香港为HE线路,三网绕美(不太建议香港)。免费支持wi...

queueuserworkitem为你推荐
手游运营手册剑三的方士使开启阴阳之力凝聚而成的魂匣怎么做啊 有详细说明吗深圳公交车路线深圳公交车路线在线漏洞检测如何查看网站的漏洞?渗透测试渗透测试的专业服务数码资源网安卓有没有可以离线刷题的软件?什么是云平台云平台和云计算的区别是什么?网管工具网管软件好用吗?什么样的网管软件好呢?我想管理二十台电脑,让其中的四五台可以上网,其它的只能上局域网,谁能推荐一款软件吗?如果出钱买也可以!谢谢了!blogcn哪种博客更好...sina.baidu.blogcn还是.............?声母是什么什么是声母,什么是韵母qq等级表QQ等级列表
godaddy域名注册 域名备案中心 vps.net wavecom 10t等于多少g gitcafe godaddy info域名 ssh帐号 dropbox网盘 本网站服务器在美国 小米数据库 双11秒杀 免费智能解析 空间技术网 重庆双线服务器托管 我的世界服务器ip 贵阳电信测速 服务器论坛 永久免费空间 更多