草庐IT

多线程、Handler机制、ThreadLocal

全部标签

c# - 获取和设置简单的静态属性线程安全吗?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:AreC#auto-implementedstaticpropertiesthread-safe?在下面的示例类中staticclassShared{publicstaticstring[]Values{get;set;}}许多读取器线程定期读取Values字符串数组,而有时单个写入器会使用setter将整个数组替换为新值。我需要使用ReaderWriterLock还是C#会自动处理?编辑:在我的例子中,唯一需要的“线程安全”是:当读者正在搜索一个值时,当作者替换数组时,不会发生任何不好的事情。我不在乎读者是

c# - 是在C#中的不同线程之间共享的静态类

我需要在不超出边界的情况下在线程之间共享一个值。静态变量可以做到这一点吗? 最佳答案 静态变量在AppDomain中的多个线程之间共享。所有线程都将看到静态变量的同一个实例并对其进行操作。因此,如果您使用的是静态变量,您可能希望使用某种形式的同步来保护对该变量的访问。如果你想要一个线程局部变量,ThreadLocal类使这很容易。它提供了一种生成和使用每个线程唯一数据的方法。 关于c#-是在C#中的不同线程之间共享的静态类,我们在StackOverflow上找到一个类似的问题:

c# - 调用线程必须是 STA,因为在 WPF 中很多 UI 组件都需要这个错误。在 form.show() 上

首先,我在网站上阅读了几个类似问题的答案,但老实说,我觉得它们有点令人困惑(由于我缺乏经验而不是答案!)。我正在使用FileSystemWatcher()类来监视正在创建/更改的文件的文件夹。事件发生后,我想在项目中加载另一个表单。当新表单上的构造函数试图执行时,我没有加载表单,而是收到错误。我只使用一个线程-我没有尝试在不同的线程下加载表单。我的代码如下//MainWindowpublicstaticvoidFolderWatcher(){FileSystemWatcherfsWatcher=newFileSystemWatcher();fsWatcher.Path="C:\\dum

c# - 跨线程操作无效(How to access WinForm elements from another module events?)

我有一个带有串行端口信号事件的模块serialPort.DataReceived.AddHandler(SerialDataReceivedEventHandler(DataReceived));DataReceived在哪里letDataReceivedab=rxstringProcessData正在调用WinForms方法letProcessData(a,b)=dataProcessor.Invoke(a,b)|>ignore这是privatevoidProcessData(objectsender,EventArgse){byte[]m=Core.ncon.ArrayRead;s

c# - 多线程 Web 应用程序

我知道有很多案例是在应用程序中使用多线程的好案例,但什么时候对.netweb应用程序进行多线程最好? 最佳答案 几乎可以肯定,托管环境(IIS等)的Web应用程序已经是多线程的。如果您的页面受CPU限制(并希望使用多核),那么可以说多线程不是一个好主意,因为当您的系统负载不足时您已经在使用它们。它可能有帮助的时候是你受IO限制的时候;例如,您有一个网页需要与3个外部Web服务对话、与数据库对话并写入文件(所有这些都不相关)。您可以在不同的线程上并行执行这些操作(理想情况下使用内置的异步操作,以最大化完成端口的使用)以减少整体处理时间

c# - Random.Next() 有时会在不同的线程中返回相同的数字

我有以下类(class)classProgram{staticRandom_Random=newRandom();staticvoidMain(string[]args){...for(inti=0;i代码创建指定数量的线程,启动每个线程,并为每个线程分配一个随机的device_id。由于某种原因,创建的前两个线程通常具有相同的device_id。我不明白为什么会这样。 最佳答案 Random不是线程安全的——您不应该使用来自多个线程的同一个实例。它可能比仅返回相同的数据更糟糕-通过从多个线程使用它,您可以将它“卡住”在总是返回0的

c# - 如何在 C# 中获取 CPU 的逻辑核心数/线程数?

如何获取CPU中的逻辑核心数?我需要这个来确定我应该在我的应用程序中运行多少个线程。 最佳答案 使用Environment.ProcessorCountproperty,它返回逻辑核心的数量。 关于c#-如何在C#中获取CPU的逻辑核心数/线程数?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/13015794/

c# - 如何从另一个线程更新 GUI 上的文本框

这个问题在这里已经有了答案:HowdoIupdatetheGUIfromanotherthread?(47个回答)关闭5年前。我是C#的新手,我正在尝试制作一个简单的客户端服务器聊天应用程序。我的客户端窗口窗体上有RichTextBox,我正在尝试从另一个类中的服务器更新该控件。当我尝试执行此操作时,出现错误:“跨线程操作无效:从创建它的线程以外的线程访问控制textBox1”。这是我的Windows窗体的代码:privateTopictopic;publicRichTextBoxtextbox1;boolcheck=topic.addUser(textBoxNickname.Text

c# - 简单的多线程安全日志类

创建简单的多线程安全日志记录类的最佳方法是什么?这样就足够了吗?最初创建日志时如何清除日志?publicclassLogging{publicLogging(){}publicvoidWriteToLog(stringmessage){objectlocker=newobject();lock(locker){StreamWriterSW;SW=File.AppendText("Data\\Log.txt");SW.WriteLine(message);SW.Close();}}}publicpartialclassMainWindow:Window{publicstaticMainW

c# - 线程控制调用

我有一个函数publicvoidShowAllFly(){cbFly.Items.Clear();cbFly.Items.Add("UçuşSeçiniz...");dsFlyTableAdapters.tblFlyTableAdapter_t=newKTHY.dsFlyTableAdapters.tblFlyTableAdapter();dsFly_mds=newdsFly();_mds.EnforceConstraints=false;dsFly.tblFlyDataTable_m=_mds.tblFly;_t.Fill(_m);foreach(DataRow_rowin_m.Ro