Tag: multithreading

WCF服务不是multithreading的

我正在设计WPF应用程序使用的WCF服务。 该服务将由50个客户端使用并托管在多核服务器上。 这就是为什么我希望它是multithreading的。 这就是我宣布它的方式: [ServiceContract( SessionMode = SessionMode.Required, Namespace = Constants.NameSpace, CallbackContract = typeof (ISaphirServiceCallback))] public interface ISaphirService [ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode=InstanceContextMode.PerSession)] public partial class SaphirService : ISaphirService 和服务器端配置: 这是客户端配置: 问题是,每个请求都在同一个线程上处理。 我在互联网上查了很多但是一切对我来说都很好…… 你们有什么想法吗? 谢谢 !

如何在C#中的DataTable.Rows.Count上创建n对象?

以下所有代码仅用于创建两个进程。 虽然我需要创建n进程来打开Chrome浏览器并基于dtUser.Rows.Count运行OpenNRowsInData(user, pwd) ,因为这是动态的。 我不知道为什么OpenNRowsInData(user, pwd); 总是只获得第一行。 我有一个1-7行的DataTable范围。 通常,我通常用来创建两个对象。 static myObject[] browser = new myObject[] { new myObject(Browsers.Chrome, 0), new myObject(Browsers.Chrome, 0) }; Thread t1, t2; t1 = new Thread(new ThreadStart(AllCase)) { Name = “Thread1” }; t1.Start(); t2 = new Thread(new ThreadStart(AllCase)) { Name = “Thread2” }; t2.Start(); 在AllCase类中: static int[] stepRun = { 0, […]

Task.Delay()和新任务(()=> Thread.Sleep())之间的区别

我正在整理一个小小的演示,以便使用Thread.Sleep()模拟一个长时间运行的方法,并希望添加异步以轻松地从同步过程转到异步过程。 这是初始代码: private void button1_Click(object sender, EventArgs e) { LongProcess(); } private void LongProcess() { for (int i = 0; i < 33; i++) { progressBar1.Value += 3; Thread.Sleep(1000); } progressBar1.Value += 1; } 我以为我可以简单地将Thread.Sleep(1000)更改为new Task(()=>Thread.Sleep(1000)) ,如下所示: private void button1_Click(object sender, EventArgs e) { LongProcess(); } private async void LongProcess() { for (int i = […]

WPF中的multithreading使用C#(与后台工作者)

我编写了代码来保存应用程序生成的图像。 图像的大小约为32-35 MB。 将图像保存为BMB文件时,需要很长时间,大约3-5秒。 为此,我使用了后台工作程序但是在运行后台工作程序时,它显示了一个错误,例如……“无法访问在不同线程上创建的对象”。 以下是代码: private void btnSaveDesign_Click(object sender, RoutedEventArgs e) { Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog(); sfd.Title = “Save design as…”; sfd.Filter = “BMP|*.bmp”; if (sfd.ShowDialog() == true) { ww = new winWait(); ww.Show(); System.ComponentModel.BackgroundWorker bw = new System.ComponentModel.BackgroundWorker(); bw.DoWork += new System.ComponentModel.DoWorkEventHandler(bw_DoWork); bw.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); fName = sfd.FileName; cache = new […]

如何在多核机器上运行的C#dot net代码中使用硬件线程?

如何在多核机器上运行的C sharp代码中使用硬件线程 ? 任何例子将不胜感激。 我希望在我的机器的两个核心上并行运行两个线程。 如果我用C sharp创建正常的软件线程,它们可以在单核上运行。 是否可以在两个内核上隐式并行运行这两个线程,以获得更好的性能?

C#锁定在锁定块中重新分配的对象

我在一个类中有这个代码: private static MyObject _locker = new MyObject(); … lock (_locker) { … _locker = new MyObject(); … } 它会锁定_locker吗?

为什么SynchronizationContext检查为null?

在try块中的WindowsFormsSynchronizationContext类的InstallIfNeeded方法 : SynchronizationContext currentContext = AsyncOperationManager.SynchronizationContext; //Make sure we either have no [….] context //or that we have one of type SynchronizationContext if (currentContext == null || currentContext.GetType() == typeof(SynchronizationContext)) { … 首先,调用AsyncOperationManager.SynchronizationContext getter,并检查其返回值是否为null。 在这里检查是否需要null? 下面的AsyncOperationManager.SynchronizationContext代码。 它首先检查当前同步上下文是否为空,如果是,则创建一个新的。 所以这个getter可能永远不会返回null。 public static SynchronizationContext SynchronizationContext { get { if (SynchronizationContext.Current == null) { SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); } return SynchronizationContext.Current; […]

定时器和线程有问题

我是一个不熟练的C#编码器,这就是为什么无论互联网上的信息量如何,这个问题都让我感到非常困难。 我实际上是在一个计时器上创建一个程序,它反复轮询网站以获取一些信息。 在此过程中,将创建WebBrowser控件以导航到信息(身份validation所需)。 该程序在启动时运行这一系列事件,然后使用System.Timers.Timer设置为每10分钟(当然调试较少)来执行相同系列的事件,但当我的Timer.Elapsed事件触发该过程时,我得到A: 无法实例化描述为ActiveX控件’8856f961-340a-11d0-a96b-00c04fd705a2’的 ThreadStateException , 因为当前线程不在单线程单元中。 这是我的程序的精简版。 private void Form1_Load(object sender, EventArgs e) { GetDataFromWebBrowser(); Set_Auto_Refresh_Timer(); } private void Set_Auto_Refresh_Timer() { System.Timers.Timer TimerRefresh = new System.Timers.Timer(10000); TimerRefresh.Elapsed += new System.Timers.ElapsedEventHandler(TimerRefresh_Elapsed); TimerRefresh.AutoReset = true; TimerRefresh.Start(); } private void TimerRefresh_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { GetDataFromWebBrowser(); } private void GetDataFromWebBrowser() { WebBrowser wb = new WebBrowser(); […]

静态方法线程是否安全

如果我有一个静态方法将一个对象转换为另一个对象,这个方法在C#中是否安全? public static AnotherDataClass Convert(MyDataClass target) { AnotherDataClass val = new AnotherDataClass(); // read infomration from target // put information into val; return val; } 只是想让问题更清楚…… 当调用convert方法….我们可以假设目标不会被修改。 因为Convert方法只对目标的“attrubite”感兴趣

使用MEF进行线程安全延迟实例化

// Member Variable private static readonly object _syncLock = new object(); // Now inside a static method foreach (var lazyObject in plugins) { if ((string)lazyObject.Metadata[“key”] = “something”) { lock (_syncLock) { // It seems the `IsValueCreated` is not up-to-date if (!lazyObject.IsValueCreated) lazyObject.value.DoSomething(); } return lazyObject.value; } } 在这里,我需要每个循环同步访问。 有很multithreading迭代这个循环,并根据它们正在寻找的key ,创建并返回一个惰性实例。 lazyObject应该lazyObject创建lazyObject 。 虽然Lazy类是这样做的,尽管使用了锁,但在高线程下我创建了多个实例(我在一个volatile static int上使用Interlocked.Increment跟踪它并将其记录到某处)。 […]