C# ConcurrentBag上的NullReferenceException。使用线程添加

C# ConcurrentBag上的NullReferenceException。使用线程添加,c#,multithreading,C#,Multithreading,我最初使用的是一个列表,但在看到该列表不“线程安全”后,我改为ConcurrentBag 以下是到目前为止我的代码。当它运行时,它不会添加到ConcurrentBag,我得到一个NullReferenceException-“对象引用未设置为对象的实例”。我不确定问题是什么,因为我没有太多线程经验 static ConcurrentBag<String> urls; // ... static void buildThreads() { for (int i = 0; i

我最初使用的是一个
列表
,但在看到该列表不“线程安全”后,我改为
ConcurrentBag

以下是到目前为止我的代码。当它运行时,它不会添加到
ConcurrentBag
,我得到一个
NullReferenceException
-“对象引用未设置为对象的实例”。我不确定问题是什么,因为我没有太多线程经验

static ConcurrentBag<String> urls;

// ...

static void buildThreads()
{
    for (int i = 0; i < threads; i++)
    {
        Thread thread = new Thread(buildTokens);
        thread.Start();
    }
}

static void buildTokens()
{
    while (true)
    {
        if (numSockets < tokens)
        {
            getUrl();

            numSockets++;
            Console.WriteLine(numSockets + "/" + tokens);
        }
    }
}

static void getUrl()
{
    urls.Add("test");
}
静态ConcurrentBag URL;
// ...
静态void buildThreads()
{
对于(int i=0;i

我将感谢任何帮助。谢谢。

在访问此对象之前执行此实例化,它现在包含一个
null
引用:

static ConcurrentBag<string> urls = new ConcurrentBag<string>();
静态ConcurrentBag URL=新ConcurrentBag();

在访问此对象之前执行此实例化,它现在包含一个
null
引用:

static ConcurrentBag<string> urls = new ConcurrentBag<string>();
静态ConcurrentBag URL=新ConcurrentBag();

问题:您的
ConcurrentBag
变量
url
null
,因为您没有正确初始化它

解决方案:您需要使用
new
关键字正确初始化
ConcurrentBag
变量
url

替换此项:

static ConcurrentBag<String> urls;
静态ConcurrentBag URL;
为此:

static ConcurrentBag<String> urls = new ConcurrentBag<String>();
静态ConcurrentBag URL=新ConcurrentBag();

问题:您的
ConcurrentBag
变量
url
null
,因为您没有正确初始化它

解决方案:您需要使用
new
关键字正确初始化
ConcurrentBag
变量
url

替换此项:

static ConcurrentBag<String> urls;
静态ConcurrentBag URL;
为此:

static ConcurrentBag<String> urls = new ConcurrentBag<String>();
静态ConcurrentBag URL=新ConcurrentBag();
您必须“新建”您的并发包(创建实例):

static ConcurrentBag url=new ConcurrentBag()
如果您使用Visual Studio构建和调试代码,您应该能够在添加到包的行上放置断点,并注意变量的值为“null”

您必须“新建”并发包(创建实例):

static ConcurrentBag url=new ConcurrentBag()

如果您使用Visual Studio构建和调试代码,您应该能够在添加到包的行上放置一个断点,并注意变量的值为“null”

Try
static ConcurrentBag url=new ConcurrentBag()可能重复的Try
静态ConcurrentBag URL=new ConcurrentBag()可能重复的Oops,我知道它会是这样的。谢谢哎呀,我就知道会是这样的。谢谢