我是一个被要求对C#应用程序做一些修改的Java程序员。我已经和C#一起工作了一周了,我终于达到了这样的地步:查看文档对我没有帮助,当我在谷歌上搜索时,我也找不到解决方案。
在本例中,我有一个Windows服务,用于处理到达MSMQ的消息。当接收到一条消息时,当前侦听线程会将其取出,然后执行一项需要几秒钟的操作。
public void Start()
{
this.listen = true;
for (int i = 0; i < Constants.ThreadMaxCount; i++)
{
ThreadPool.QueueUserWork
我对C#中的线程有点陌生,并对当前的情况提出了几个问题:
在C#中实现线程的方法是什么?(也就是说,我可以想到两个最上面的: backgroundWorker、Thread等)
- How do you cause deadlock and if there is deadlock how do you get out of it (in C#)?
- How does backgroundworker get implemented? It seems to have an underlying set of methods, but I'd like to know w
我正在尝试在VB.NET中启动一个新线程,但我遇到了语法问题。
在C#中,我们可以使用以下命令完成相同的任务:
var manualResetEvent = new ManualResetEvent(false);
waitHandles.Add(manualResetEvent);
var taskOne = Task.Factory.StartNew(() => new Thread(TaskToRun).Start(manualResetEvent));
taskOne.Wait();
TaskToRun是一个只有一个对象参数的空方法。
所有在线转换器都会生成类似下面这样的VB.N
我正在使用.NET (C#)。
如果我有两个运行T1和T2的线程,T1是这样的:
while (true)
{
dosomething(); //this is a very fast operation
sleep(5 seconds);
}
与此同时,T2正在做一些完全不同的事情,但是它需要不时地给T1一次机会,这样即使睡眠时间还没有到,它也会从睡眠中唤醒。我该怎么做呢?
将Java应用程序移植到C#的一部分是在C#中实现同步消息缓冲区。我所说的synchronized,是指线程与它之间的消息读写应该是安全的。
在Java语言中,可以使用synchronized方法以及wait()和notifyAll()来解决这个问题。
示例:
public class MessageBuffer {
// Shared resources up here
public MessageBuffer() {
// Initiating the shared resources
}
public synchronized void
我有一个名为Get的方法和一个用C#编写的名为X的回调方法,它必须从Get .I返回_name,只有在回调为finished.So后才能获得_name的实际值,我必须在*点停止,直到回调完成。在此之后,只有我可以返回_name .So,我必须知道回调是否完成。
如何实现上述场景的解决方案?有谁能对此提出解决方案吗?
我的方法是这样的
string _name ;
public string Get()
{
//Some Statements
//Asynchronous call to a method and its call back method is X
在C#中,我想知道是否可以等待,直到BlockingCollection被后台线程清除,如果时间太长就会超时。
我现在拥有的临时代码让我觉得有点不雅致(因为什么时候使用Thread.Sleep是个好习惯?):
while (_blockingCollection.Count > 0 || !_blockingCollection.IsAddingCompleted)
{
Thread.Sleep(TimeSpan.FromMilliseconds(20));
// [extra code to break if it takes too long]
}
我的程序中有三个线程,我希望当线程1完成时,它会通知线程2开始,而当线程2结束时,它应该会通知线程3开始。
我知道在C#中有等待句柄可以做到这一点,但是我不知道如何使用它们。
以下是我的程序代码:
class Program
{
static void Main(string[] args)
{
Thread t1 = new Thread(Task1);
Thread t2 = new Thread(Task2);
Thread t3 = new Thread(Task3);
在Asp.Net网页按钮中单击下面的代码
//Code is running on Asp.Net worker Thread
var httpClient = new HttpClient();
var task = httpClient.GetAsync("/someapiCall"); //Creates a new thread and executed on it
task.Wait();
现在,当我调用task.Wait时,工作线程会发生什么呢?
它是否处于暂停状态,等待httpClient调用完成?
它会被返回到线程池并可用于处理其他请求吗?
上
我正在用C#做一个应用程序,它使用winform作为图形用户界面,并在后台运行一个单独的线程,自动改变事情。例如:
public void Run()
{
while(true)
{
printMessageOnGui("Hey");
Thread.Sleep(2000);
// Do more work
}
}
我如何让它在循环中的任何地方暂停,因为循环的一次迭代大约需要30秒。所以我不想在它完成一次循环后暂停它,我想按时暂停它。
我有以下C#代码:
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace CTCServer
{
class Server
{
//Stores the IP Adress the server listens on
private IPAddress ip;
//Stores the port the server listens on
以下是我的简单C#控制台应用程序:
using System.Diagnostics;
using System.Threading;
public static class Program
{
public static int Main(string[] args)
{
var e = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem(state =>
{
Process.Start("nonexistent path"
我在Silverlight应用程序中使用ADO.NET dataservices,由于silverlight库不支持IQueryable上的ToList()调用,因此我认为可以围绕此创建一个名为SilverlightToList()的扩展方法。因此,在此方法中,我将在上下文中调用BeginExecute方法,如下所示:
var result = context.BeginExecute<T>(currentRequestUri,null,context);
result.AsyncWaitHandle.WaitOne();
使用C# .NET 4.0
我正在尝试使用BackgroundWorker检索远程计算机上的服务列表。这是作为后台工作进程运行的,因此UI在等待信息时保持响应。
我的方法是将对信息的请求放在后台工作者的_DoWork方法中,并使用ManualResetEvent.Set()来指示信息已经被处理。应该在_RunWorkerCompleted方法中设置ManaualResetEvent。_RunWorkerCompleted从不执行。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using
我正在尝试将C#中的函数转换为VB.Net 2008,但似乎无法使Lambda表达式工作。代码取自将电子邮件保存到Azure blob存储的
任何帮助都将不胜感激。
public void Run()
{
var mutex = new ManualResetEvent(false);
while (true)
{
mutex.Reset();
listener.BeginAcceptSocket((ar) =>
{
这是我在WPF.NET中遇到的一个问题。为了说明这个问题,让我们看看下面的课程:
public class TaskRunnerWithProgressFeedback(){
ManualResetEvent _event = new ManualResetEvent(false);
public void RunTask(Action action) {
_event.Reset();
//Display loading screen
RunAsync(action);
Console.WriteLine(&