现在我有C#代码在不同的线程中生成一个新窗口,这有效,但是一旦新生成的窗口打开,它就会关闭并且线程结束。我将如何做到这一点,以便可以从第一个线程关闭新生成的窗口?这是当前生成工作方式的“树”:主线程--使用主线程中的一个函数在单独的线程中启动另一个函数来打开w窗口,导致窗口使用该线程。基本上我只希望两个窗口各有自己的线程。并能够从第一个窗口线程控制生成的辅助窗口。 最佳答案 我敢打赌你正在做的是这样的:newThread(()=>newTestForm().Show()).Start();因为这会使窗口立即消失,就像您描述的那样。试
假设我有一个函数,它遍历一百万/十亿个字符串并检查其中的某些内容。例如:foreach(StringiteminListOfStrings){result.add(CalculateSmth(item));}它会消耗很多时间,因为CalculateSmth是一个非常耗时的函数。我想问一下:这种进程怎么集成多线程?f.ex:我想启动5个线程,每个线程都返回一些结果,这样一直持续到列表有项目为止。也许任何人都可以展示一些示例或文章..忘了说我在.NET2.0中需要它 最佳答案 你可以试试Parallelextensions(.NET4.
在WPF应用程序中,ObservableCollection由LINQtoSQL查询填充和更新。然后使用此ObservableCollection中的值更新UI对象。通过LINQtoSQL查询更新此ObservableCollection的操作在单独的线程中执行是否可能且合理?如果是,在这种情况下,它会是这个ObservableCollection的同一个实例吗?(我的意思是,如果从LINQdatacontext中获取值的方式与为更新UI赋值的方式不同,那么我将无法更新UI) 最佳答案 .Net4.5在BindingOperatio
我正在寻找一种方法来重新启动已被Abort()停止的线程..publicpartialclassMyProgram:Form{privateThreadMyThread=newThread(MyFunction);privateSystem.Windows.Forms.ButtonstartStopBtn=newSystem.Windows.Forms.Button();publicMyProgram(){MyThread.Start();startStopBtn+=newEventHandler(doStop);startStopBtn.Text="Stop";}privatesta
我正在练习线程并遇到了这个问题。情况是这样的:我在一个表单上有4个进度条,一个用于下载文件,一个用于显示页面加载状态等...我必须从单独的线程控制每个ProgressBar的进度。问题是我收到了一个InvalidOperationExceptionCross-threadoperationnotvalid:Control'progressBar1'accessedfromathreadotherthanthethreaditwascreatedon.我的这种方法有错吗?有人可以告诉我如何实现吗? 最佳答案 Control只能在创建它
假设我像这样启动两个线程://StartfirstthreadThreadloaderThread1=newThread(loader.Load);loaderThread1.Name="Rope";loaderThread1.Start();//StartsecondthreadThreadloaderThread2=newThread(loader.Load);loaderThread2.Name="String";loaderThread2.Start();有什么方法可以通过使用它们的Name属性来枚举线程?我想检查具有特定名称的线程是否仍在运行。我创建的每个线程都处理一组命名的
我在用C#开发时遇到过这个问题好几次。我会愉快地编码,在线程之间来回传递对象等等,然后突然间我得到了这个熟悉的错误:"Thecallingthreadcannotaccessthisobjectbecauseadifferentthreadownsit."好吧,我以前处理过它,尤其是GUI线程上的对象。您只需编写一些额外的代码来围绕该特定问题进行编程。但是我偶尔会遇到一个对象,它无论如何都是普通的,但它不喜欢被不同的线程访问。编辑我在原来的帖子中弄错了导致访问异常的对象。这不是IPAddress,而不是它的System.Printing.PrintQueue.我用它来获取IP地址。这是
如何在不同用户的安全上下文中启动线程?当进程正常启动线程时,安全上下文也会被传递,但如何使用不同用户的主体在不同的安全上下文中启动线程? 最佳答案 我相信你可以设置CurrentPrincipal作为线程启动后线程代码的第一个操作,然后才开始执行本应与其他主体一起运行的代码。这应该会处理任何基于.NET角色的检查。如果您还需要模拟来调用操作系统,您可以模拟WindowsIdentity。代码(可能有效也可能无效——没有测试):publicvoidRun(objectprincipalObj){if(principalObj==nul
我们在get上使用双重锁定实现了一个延迟加载的单例,以确保实例只初始化一次(而不是由于线程竞争条件而初始化两次)。我想知道是否只使用Lazy是解决这个问题的好方法吗?即.privatestaticLazy_instance=newLazy(()=>returnnewMyClass());publicstaticMyClassInstance{get{return_instance.Value;}} 最佳答案 我建议你阅读评论中的引用文章:LazyClassImplementingtheSingletonPatterninC#在所有情
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我想很好地掌握C#中的多线程。我读过一些文章,例如JosephAlbahari'stutorials解释概念,但正如你所知,无论你读了多少书,如果你不练习,大部分内容都会变成垃圾。我需要一些与现实生活实践相关的具有指导性和实用性的代码示例,而不是一些打印一些行的示例。你有什么建议吗?