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)创建线程类

ftlcloud(超云)9元/月,1G内存/1核/20g硬盘/10M带宽不限/10G防御,美国云服务器

ftlcloud怎么样?ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。点击进入:ftlcloud官方网站...

georgedatacenter39美元/月$20/年/洛杉矶独立服务器美国VPS/可选洛杉矶/芝加哥/纽约/达拉斯机房/

georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,georgedatacenter是一家成立于2019年的美国VPS商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacenter的VPS采用KVM和VMware虚拟化,可以选择windows...

90IDC-香港云主机,美国服务器,日本KVM高性能云主机,创建高性能CLOUD只需60秒即可开通使用!

官方网站:点击访问90IDC官方网站优惠码:云八五折优惠劵:90IDCHK85,仅适用于香港CLOUD主机含特惠型。活动方案:年付特惠服务器:CPU均为Intel Xeon两颗,纯CN2永不混线,让您的网站更快一步。香港大浦CN2測速網址: http://194.105.63.191美国三网CN2測速網址: http://154.7.13.95香港购买地址:https://www.90idc.ne...

queueuserworkitem为你推荐
u盘无法读取U盘为什么不能显示flash导航条如何用Flash制作简单的导航栏伪静态静态与伪静态的区别?正则表达式javajava正则表达式中小企业信息化信息化为中小企业发展带来了哪些机遇神雕侠侣礼包大全神雕侠侣手游每天送的元宝买什么合适idc前线怎么知道我电脑是3兆的宽带?bluestackbluestacks安卓模拟器有什么用bluestack安卓模拟器bluestacks怎么用?电子商务网站模板电子商务网站模板哪个好?电子商务网站模板免费建站怎么样?
游戏服务器租用 欧洲欧洲vps vps教程 荣耀欧洲 securitycenter ubuntu更新源 彩虹ip 炎黄盛世 秒杀预告 100mbps 酷番云 如何建立邮箱 永久免费空间 脚本大全 新网dns windowsserver2008r2 hosting 服务器机柜 paypal登陆 网络安装 更多