Веб-рабочий - это процесс браузера или поток процессов браузеров? [Дубликат]

Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:

Предположим, что у вас есть класс с именем Student.

public class Student
{
    private string FirstName;
    private string LastName;
    public string GetFullName()
    {
        return FirstName + LastName;
    }
}

Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.

public class StudentInfo
{      
    public string GetStudentName()
    {
        Student s;
        string fullname = s.GetFullName();
        return fullname;
    }        
}

Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.

5
задан Misha Moroshko 24 May 2010 в 12:10
поделиться

2 ответа

Проверьте HTML5 Rocks: Основы работы веб-работников для общего учебника.

  • Работники начнут работу, как только вы назовете метод postMessage рабочего .
  • функция, связанная с onmessage рабочего в основном коде, будет работать, когда рабочий вызывает postMessage.
  • глобальные переменные не разделяются между основными и рабочими потоками. Единственный способ передачи данных - обмен сообщениями через postMessage.
  • , как вы подозревали, onmessage как для рабочего, так и для основного кода имеет то же значение. Это обработчик событий, когда поток получает событие сообщения. Вместо этого вы можете использовать addEventListener, поймав событие message:

Основной код:

function showResult(event) {  
   document.getElementById("result").textContent = event.data;  
   dump("Got: " + event.data + "\n");  
}
var worker = new Worker("fibonacci.js");
worker.addEventListener('message', showResult, false);

Рабочий код:

addEventListener('message', resultReceiver, false);

Пример фибоначчи, который вы взяли, является примером рекурсивного рабочего. Если бы не использовать рабочих, это было бы примерно так:

function fibonacci(n) {
    if (n == 0 || n == 1) return n;
    return fibonacci(n-1) + fibonacci(n-2);
}

var result = fibonacci(5);
dump("Got: " + result + "\n");

(о нет, я не собираюсь делать без вас стеки, вы сами пишете!) [/ ​​G9]

6
ответ дан syockit 27 August 2018 в 22:54
поделиться

Я также хочу добавить, что вы можете отлаживать веб-работников только в браузерах на основе Chromium. Вы должны выбрать Sources в панели разработчика, а в правом столбце - нижнюю строку Рабочие , а затем установите флажок в начале .

0
ответ дан r90t 27 August 2018 в 22:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: