穿线-确保线头完成
已解决: http://msdn.microsoft .com/en-us/library/ff431782(v = vs.92).aspx 我有以下课程,可以为我提供WP7中的当前位置: public class Position { private GeoCoordinateWatcher watcher = null; public GeoCoordinate CurrentLocation { get; set; } public Position() { ObtainCurrentLocation(); } private void ObtainCurrentLocation() { watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default); watcher.PositionChanged
2 2024-04-26
编程技术问答社区
C#-如何暂停应用程序,直到定时器完成?
我有一个我需要等待特定时间的应用程序,但是如果需要,我还需要能够取消当前操作.我有以下代码: private void waitTimer(int days) { TimeSpan waitTime = TimeSpan.FromDays(days); System.Timers.Timer timer = new System.Timers.Timer(waitTime.TotalMilliseconds); // Wait for some number of milliseconds timer.Enabled = true; timer.Start(); timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); // Subscribe to event handler while (!TimerSettings.TimerFinished && !quitToken
10 2024-04-26
编程技术问答社区
如何在后台线程上调用
有没有办法在背景线程上调用方法? 我知道背景工作者/创建线程或使用threadpool.queueuserworkitem等,但这不是我正在寻找的答案 例如SCSF具有确保在背景或UI线程中调用该方法的属性 我想为一个小应用程序做类似的事情,并且正在寻找一个工作示例 解决方案 我认为背景工人适合您的需求.它允许您其他解决方案 有很多方法可以在背景线程上调用一种方法. 该方法正在运行时是否要阻止?您想要该方法返回的结果吗?您是否要在UI中显示此结果?该方法仅调用一次吗?很多次,根据需要?多次循环?异步?如果您的应用程序退出,背景线程是否应该继续?这些问题的答案将告诉您应使用哪种方法. 您可以从一个很好的其他解决方案 线程池已经使用了背景线程.但是,您无法控制这些线程.如果要控制,则需要使用system.threading.thread.这使您可以更多地控制线程的创建方式(背景,前景等)和管理(暂停,简历,睡眠等).
4 2024-04-26
编程技术问答社区
C#.NET WPF中的基本线程锁定
这似乎是一个基本问题,但是Google没有帮助我...如何在C#.NET WPF中进行基本线程锁定?在我相当简单的用户应用程序中,我有多个线程执行时间密集型操作,将其结果保存到一个常见的数据结构中或从这种常见的数据结构中读取.我希望能够锁定()和解锁()在访问此数据结构周围以保持线程安全性.但是,我的代码中有许多不同的位置可以从我的代码中访问此数据结构,而不仅仅是一个.什么.NET对象用于实现此锁定? 解决方案 尝试以下方法: public static class LockHolder { public static object Lock = new object(); } 然后,在您的代码中,使用: lock(LockHolder.Lock) { //your safe code } http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.71).aspx 我想更多的信息可能会有所
2 2024-04-26
编程技术问答社区
当通过不同线程并行访问方法时,SQLConnection线程安全吗?
我想知道是每次通过多个线程访问该方法时创建的SqlConnection对象,并且也想知道是此方法,并且SqlConnection类是线程安全的. public DataSet GetData( string deptId) { using(SqlConnection con = new SqlConnection(connectionString)) { using(SqlDataAdapter da = new SqlDataAdapter( "Select * FROM Employee where DeptId='"+deptId+"'",con)) { DataSet ds = new DataSet(); da.Fill(ds); return ds; } } } 解决方案 a> 不是线程safe?如
6 2024-04-26
编程技术问答社区
第二种方法完成时如何执行代码
我有一个情况,我需要在2种方法中的第1个方法的末执行一些代码 - 以第二次完成为准.我的特殊情况是Blazor Server,我需要在InitializedAsync()/onafterRenderAsync()的末尾执行此代码.在这种情况中 我已经想出了以下课程来完成此操作: public class DoubleFinish { private volatile bool _firstFinished = false; private volatile bool _secondFinished = false; private volatile bool _alreadyReturnedTrue = false; /// /// Call when the first method completes. Returns true if the 2nd method is also /// complete
2 2024-04-26
编程技术问答社区
这个后台线程队列是一个高性能的实现吗?
具体来说,我想知道: 手动Resetevent在处于等待状态时会消耗资源吗?上下文切换的性能降解是否适用于处于等待状态的线程? 如果我可以选择使用多个背景线程,每种工作较少的工作,或者一个可以做更多工作的背景线程,而我选择使用多个...等待线程队列在没有做任何事情的过程中会影响过程性能吗? 我应该在C#中使用更好的FIFO线程队列吗? 任何建议都将受到赞赏. /// /// This class is responsible for peforming actions in a FIFO order on a /// background thread. When it is constructed, a background thread is created /// and a manual reset event is used to trigger actions to be performed when /// a new
0 2024-04-26
编程技术问答社区
具有序列值的项目的并发队列
我正在使用ConcurrentQueue存储我系统中发生的某个活动的结果(ASP.NET Core 6).它运行良好. 但是现在我有一个新的要求:我需要Result.Id属性 - a long值,类似于顺序数据库主键.当我加入项目时,它必须在序列中获得下一个值,即queue.Count + 1. 当我加入物品时,我不使用锁,因为ConcurrentQueue为我做到了.但是现在需要Id,我必须: 锁定访问Enqueue() 确定队列的大小 通过一个增量 设置项目的Id 招募项目 或: 锁定访问Enqueue() 招募项目 确定队列的新尺寸 更新项目的Id(但在此之前将处于不一致的状态) 我可以在不锁定Enqueue()方法的情况下执行此操作吗?也许有更好的方法? (尽管我更喜欢在可能的情况下继续使用ConcurrentQueue,因为它已经对我拥有的东西很好.) 解决方案 添加项目时不要分配ID,而是可以在将项目添
10 2024-04-26
编程技术问答社区
以进程和线程安全的方式写入多个文件
我使用c#/asp.net/.net4.7.2 c#/asp.net/.net4.7.2构建API,并且已将其设置为在IIS中使用16个线程.有多种模块写入(仅写作,没有读数),例如: 2022-06-01-Wed-_ModuleA.log 2022-06-01-Wed-_ModuleB.log 我正在使用通常的锁定方法: public class Audit { public static object LogWriteLocker = new object(); public void LogEntry(string path, string logText) { lock (LogWriteLocker) { File.AppendAllText(path, logText); } } } 这不应该发生,但是我看到了以下错误: The process cannot acces
2 2024-04-26
编程技术问答社区
线程安全和通用数组表?
我想拥有一个通用的线程安全集合,我看到阵列列表可以通过其静态同步方法轻松地使用线程安全,但是让我困扰的是,这个arraylaylist不是通用的,所以当我想使用我的对象时,我总是我总是必须铸造它们.有一个更简单的方法吗?还有其他列表类型. 解决方案 一点知识是一件危险的事情;-)是的,您可以使用Meta-Knight的建议和使用SyncRoot,但是您需要小心 - 这不是灵丹妙药.请参阅这篇文章来自Microsoft Blog from Microsoft Blog from Microsoft看看为什么它不像SyncRoot那样简单.该帖子的行情: 我们通用的一些精明用户 收藏观察到我们不再 提供公共SyncRoot属性 ICollection 和 我认为我们最好强迫 人们更加思考 同步,坦率地说 SyncRoot我们通用的属性 收藏不提供任何价值. 当然,这并不是说在任何情况下都不能使用 - 您只需要仔细考虑用例,而不是在自动驾驶中. 其他
0 2024-04-25
编程技术问答社区
窗口服务中的多线程
我有Windows项目和一个表格,每5秒都有计时器. 它调用和处理从请求命名为table时间和条件明智的方法. 但是我有一些方法类型,这些方法需要太多时间来响应,并希望在单独的线程中使用这些方法.这样我就可以在单独的线程和同步中运行两种请求类型. 我该如何使用线程 - 多异步线程? 分开那两个 解决方案 我建议您查看.NET 4.0 Task类.每次发射全线程可能过于杀伤.任务,与计时器一起使用基础线程池并行执行工作. 使用Task很简单: Task t = Task.Factory.StartNew( () => { // task code here }); 其他解决方案 using System; using System.Threading; class Program { static void Main() { Thread thread1 =
4 2024-04-25
编程技术问答社区
静态成员变量和线程安全
我正在处理ASP.NET MVC应用程序. 我有一个ViewModel类,我试图维护计数以生成视图中使用的DIV ID: public class ViewModel { private static uint instanceCount; private readonly uint id; public ViewModel(){ id = instanceCount++; } public uint DivId { get { return id; } } } 我在思考增加和分配静态成员时是否正确,不是线程安全,因此在Web应用程序中不安全? 使此安全的最佳方法是什么? 谢谢. 解决方案 我在思考增加和分配静态成员时是否正确,不是线程安全,因此在Web应用程序中不安全? 是的,您是正确的思考. 使此安全的最佳方法是什么? 通过同步访问:
2 2024-04-25
编程技术问答社区
哪种方式对线程同步是最好的?
哪个最强大? 有什么区别? 1. [Synchronization] public class Person : ContextBoundObject { public void Print(){ Console.WriteLine ("Start"); Thread.Sleep (100); Console.WriteLine ("END"); } } 2. private readonly object obj = new object(); public void Print(){ lock (obj) { Console.WriteLine ("Start"); Thread.Sleep (100); Console.WriteLine ("EN
0 2024-04-25
编程技术问答社区
想用c#.net中的安全线程快速读取msmq信息
我想阅读MSMQ,其中字节中的队列数据和大约1500分钟内生成的队列数量.一段时间后,它停止了.我需要阅读最高4个小时的大音量的队列. 因此,我希望以不应该被阻止的方式进行安全的线程阅读. 实际上,我对穿线不好,所以您能帮我. 目前我正在以这种方式阅读 bool ProcessStatus; //process Thread _UDPthreadConsme; private void btn_receive_Click(object sender, EventArgs e) { if (MessageQueue.Exists(@".\private$\myquelocal")) { ThreadStart _processrcs = new ThreadStart(receivemessages); _UDPthreadConsme = new Thread(_processrcs); Proce
14 2024-04-25
编程技术问答社区
" Xmldocument的任何公共静态成员都是线程安全的.不能保证任何实例成员是安全的":是的,但是
我在 这种类型的任何公共静态(在Visual Basic中共享)都是线程安全的.任何实例成员都不能保证是线程安全的. XmlNodeList班级的同一件事. 我在以下上下文中使用这些类.在Parallel.Foreach我做: X MyX = new X(); string XMLstring = MyX.GetXML(ID, true); XmlDocument doc = new XmlDocument(); doc.LoadXml(XMLstring); XmlNodeList nodeList = doc.SelectNodes("blah/secondblah"); 其中X在库中定义了它是向我提供的,其中ID是int(大致在我循环的). 这已经在非平行上下文中进行了彻底的测试,GetXML产生的string确实是正确的,相应的XmlDocument以及通过XmlNodeList>"解析"它提供了预期的结果. 现在,这种并行的上下文并假设X和G
0 2024-04-25
编程技术问答社区
使用多线程来实现网络服务器的高效搜索
我想使用httpwebrequest访问Web服务器,并从给定的页面范围内获取数千个记录.每个人都打到一个网页可获取15个记录,并且网络服务器上有近8至10000页.这意味着服务器总共命中了120000次!如果在一个过程中进行琐碎的过程,那么任务可能非常耗时.因此,多线程是想到的直接解决方案. 当前,我创建了一个工作类以进行搜索目的,该工作类将在给定范围内产生5个子工作人员(线程)搜索.但是,由于我在螺纹方面的新手能力,我无法使其正常工作,因为我很难同步并使它们都一起工作.我知道.NET中的代表,行动,事件,但使它们与线程一起工作令人困惑.这是我正在使用的代码: public void Start() { this.totalRangePerThread = ((this.endRange - this.startRange) / this.subWorkerThreads.Length); for (int i = 0; i
2 2024-04-25
编程技术问答社区
Trace.Writeline线程安全吗?
我有一个多线程程序,我想使用trace.Writeline,然后将输出重定向到文本文件: _LogTracer = new System.Diagnostics.TextWriterTraceListener(logPath); Trace.AutoFlush = true; Trace.Listeners.Add(_LogTracer); 这足以安全吗?如果两个线程试图同时写入输出文件怎么办? 解决方案 {wrt.总体线程安全} 使用Trace.Listeners.Add(或Remove)对于Trace.Write(或WriteLine)而不是 the ThreadSafety(或缺少),因为Write仅应用单个跟踪侦听器类型(如前所述,TextWriterTraceListener实现是安全的)或通过全局跟踪锁定(请参阅 TraceListener.IsThreadSafe 进行讨论). P> 我有一些笨拙的旧代码,可以修改侦听器集合,这些集合可能会
8 2024-04-25
编程技术问答社区
在线程中更新列表框中的ObservableCollection
hy, 我有一个可观察到的集合,该集合与列表框绑定.我将日志添加到可观察的集合中.我总是立即将消息添加到可观察到的收集中.但是,列表仅在循环完成后才会更新,但是当我在for循环中添加一个项目时,我想更新它.这就是为什么我使用线程但有一些问题的原因. 我有一个线程安全的观察力: class ThreadSafeObservableCollection : ObservableCollection { public override event NotifyCollectionChangedEventHandler CollectionChanged; protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { NotifyCollectionChangedEventHandler collectionChanged =
0 2024-04-24
编程技术问答社区
串行任务执行器;这个线程安全吗?
我有一个我创建的类,以允许使用ThreadPool作为执行手段的任务的异步顺序执行.这个想法是,我将有多个实例在后台运行序列任务,但是我不想为每个实例有一个单独的专用线程.我想检查的是这堂课是否真的是安全的.这很简短,所以我想我会由这里的专家运营,以防我缺少明显的东西.我省略了不同动作类型的一些便利过载. /// /// This class wraps ThreadPool.QueueUserWorkItem, but providing guaranteed ordering of queued tasks for this instance. /// Only one task in the queue will execute at a time, with the order of execution matching the order of addition. /// This is designed as a lighter-weight alt
8 2024-04-24
编程技术问答社区
从工作线程调用主线程上的事件
我很难从主线程中的辅助线程调用事件.事件处理程序未在主线程上执行.谁能给我一些关于我做错什么的指示. 谢谢 namespace ThreadSyncExample { class Program { static void Main(string[] args) { Console.WriteLine("MainThread: " + System.Threading.Thread.CurrentThread.ManagedThreadId); Execute execThe = new Execute(); execThe.FinishedThread += (src, arg) => { //This shoould be executed on MainThread right? Console.WriteLine("Thread Id: " + System.Th
4 2024-04-24
编程技术问答社区