【c# – 等待后台线程完成】教程文章相关的互联网学习教程文章

c#-多线程服务器中的处理限制【代码】

在我的客户端-服务器体系结构中,我很少使用需要限制使用的API函数.服务器使用.net C#编写,并且在IIS上运行. 到现在为止,我不需要执行任何同步.代码的编写方式是,即使客户端多次发送相同的请求(例如,创建某项请求),一个调用也将成功结束,而所有其他调用都会出错(由于服务器代码数据库结构). 执行此类限制的最佳方法是什么?例如,我希望每分钟每用户不超过1个API方法调用:foo(). 我考虑过一些SynchronizationTable,其中只有一列uniq...

c#-复制ConcurrentQueue的线程安全方法【代码】

基本上我想做到这一点:private ConcurrentQueue<FormData> _formsData;private void SaveForms() {var serializer = new DataContractSerializer(_formsData.GetType());serializer.WriteObject(fileStream, _formsData); }但是我认为将ConcurrentQueue作为对象参数传递不是线程安全的.因此,我需要先以安全的方式将整个队列复制到另一个集合,然后再将此新集合传递给WriteObject. 我发现ConcurrentQueue的CopyTo方法似乎是线程安全...

c#-限制嵌套并行循环产生的并行线程总数

所以.我有一个正在爬网的例程.该例程以IP列表作为种子,并在爬网设备时跟踪其找到的IP.当找到新的IP时,它也会对这些IP进行爬网. 这是我的问题.我在并行foreach中对种子IP进行了初始扫描,并在并行foreach中启动了在每个设备上找到的IP,因此我最终可能会产生10个线程,每个线程产生10个线程,总共100个线程(或更多)如果这些线程找到了自己的设备).我想限制整个过程使用的线程总数(例如25). 可以在C#的任务库中完成吗? 我知道foreach循环...

c#-在其他平台(64位)上执行线程

有点远射. 我有一个32位应用程序.其中有一些代码可以在64位以下更好地执行.我无法将整个应用程序转换为64位. 那么,我可以在其他过程中以64位进程运行我的应用程序的一部分吗? 谢谢解决方法:不,你不能.应用程序运行的位是在进程上指定的,而不是在线程或AppDomain上指定的. 您拥有它的唯一选择是创建一个在其他位上运行的单独的可执行文件.从您的主过程中调用该过程.如有必要,您可以使用某种消息传递机制在两者之间交换信息,就像派生...

运行时C#线程重新初始化【代码】

我已经全局声明了一个线程 私有线程_ftpthread; 该线程用于将图像上传到ftp 在我的功能中,我使用了private void uploadImage() {... ... _ftpthread = new Thread(() => sendThumbsToFTP(path,image)); _ftpthread.Start();_ftpthread = new Thread(() => sendThumbsToFTP(path2,image2)); _ftpthread.Start(); ... ... }我的问题是我可以这样初始化线程吗?第一个线程在重新初始化时是否会终止?还是两者都会被执行?解决方法:要回...

c#-如果在加载引用和对其调用函数之间的线程之间更改了易失性引用,可以对旧对象进行垃圾回收吗?【代码】

我有两个线程执行以下代码:static volatile Something foo;void update() {newFoo = new Something();foo = newFoo; }void invoke() {foo.Bar(); }线程A执行更新,线程B执行调用.这两个线程的时间安排如下:invoke加载foo的地址,update覆盖foo,然后在调用Bar之前进行垃圾回收. 垃圾回收是否有可能收集foo引用的旧对象,从而导致Bar在已收集的某些内存上被调用? 请注意,这个问题主要是出于好奇.我也希望获得更好的头衔.解决方法:垃圾...

c#-从多个线程填充列表【代码】

我有一个程序可以使用HtmlAgilityPack屏幕抓取少量页面,并且我希望它运行得更快,因为页面的加载有时可能需要1-2秒.现在,我有下面的代码按顺序执行.List<Projections> projectionsList = new List<Projections>(); for (int i = 532; i <= 548; i++){doc = webGet.Load("http://myurl.com/projections.php?League=&Position=97&Segment=" + i + "&uid=4");GetProjection(doc, ref projectionsList, (i));}基本上,我希望将循环...

c#-使用接口对后台线程进行单元测试【代码】

我创建了一个类SenderClass,它将从其构造函数中启动和运行后台工作程序.RunWorker()方法运行的是while(true)循环,该循环将从队列中弹出元素,通过SendMessage()方法发送它们,并休眠一小段时间以允许将新元素添加到队列中. 问题就出在这里:如何测试从队列发送元素的方法,而又不将其暴露给使用类的人呢? 实现方式:public class SenderClass : ISenderClass {private Queue<int> _myQueue = new Queue<int>();private Thread _worke...

首页> C#>在后台运行方法和UI线程WPF【代码】

我在以下示例中遇到了麻烦:public void Method() {LongRunningMethod(); }LongRunningMethod()大约需要5秒钟才能调用.我正在从UI线程调用Method(),因此它显然应该冻结UI.解决方案是在新Task中运行Method(),因此我将这样运行它:Task.Factory.StartNew(()=>{Method()})它仍然阻止UI,所以我认为LongRunningMethod()是否正在使用UI上下文.然后我尝试了另一种解决方案: 新的Thread(()=> Method()).Start() 它开始工作.那怎么可能?我...

c#-动态CRM共享变量线程安全【代码】

我有一个动态CRM插件,该插件有两个步骤.一种在创建前运行,第二种在创建后运行.我使用了共享变量.我在创建前在共享变量中设置值,并在创建后检索值. 现在线程安全了.如果两个用户在同一个组织中触发同一个插件,他们会不会互相覆盖对方的数据? 在共享变量中设置值:context.SharedVariables.Add("statecode", stateCodeValue); context.SharedVariables.Add("statuscode", statusCodeValue);从共享变量获取值:int statecode = (int)...

Thread.Yield是确定多线程应用程序C#中是否存在错误的标准方法吗?

我开始阅读http://www.albahari.com/threading/处发布的信息 作者指出:Sleep(0) or Yield is occasionally useful in production code for advanced performance tweaks. It’s also an excellent diagnostic tool for helping to uncover thread safety issues: if inserting Thread.Yield() anywhere in your code makes or breaks the program, you almost certainly have a bug.根据MSDN on Thread.Yield(),Thread.Yield()的定...

有什么与访问修饰符等效的东西,它可以使用C#将访问限制为仅一个线程?【代码】

基本上,我很好奇是否会发生以下情况.class MyClass {public void MyMethod() { }public void MyNonThreadMethod() { } }public void OtherThread(MyClass myObject) {Thread thread = new Thread(myObject.MyMethod);thread.Start(); // worksthread = new Thread(myObject.MyNonThreadMethod);thread.Start(); // does not work }问候,安东解决方法:从您的示例中,我假设您需要实现一种只能在单个指定线程上执行的方法.为此,您可以...

C#-线程调用不一致【代码】

我是高级编程语言的初学者.我正在尝试使用VS 2010 C#为串口创建WForms应用程序 我收到以下错误:Cross-thread operation not valid: Control 'rtxtDataArea' accessed from a thread other than the thread it was created on.这发生在这里:private void ComPort_DataReceived_1(object sender, SerialDataReceivedEventArgs e){recievedData = ComPort.ReadExisting(); //read all available data in the receiving buffer.// Sh...

c#WPF UI挂起,而在UI线程中更新数据【代码】

UI冻结3-10秒,同时更新UI线程中的数据我想更新UI线程中的数据而不冻结. 码:Task t = Task.Factory.StartNew(() => {// Get data from ServerGetData(true); });内在Getdata()//Converst JSON to DataSet Object:- "tempDataSet" Task task = Task.Factory.StartNew(() => { RetriveData(tempDataSet, firstTime); }, CancellationToken.None, TaskCreationOptions.None, MainFrame.Current);内部RetriveDataDataTable...

如何获取在C#线程中运行的操作的返回值?【代码】

我想让一个函数在一个扔掉的线程中运行东西… aka继续执行东西,而不必等待它执行之前的行中的函数. 所以我在这里做了一些功能…public static object Do(System.Action Method) {object ret;System.Threading.Thread t = new System.Threading.Thread(() => {ret = Method(); });t.SetApartmentState(System.Threading.ApartmentState.STA);t.Start();return ret; }看起来很简单…只有一个问题…我收到以下错误Cannot implicitly c...