System.Threading.Thread наследование

  1. Построить blob входных байтов PDF
  2. Использовать iframe и PDF.js, исправленные с помощью обходной путь кросс-браузера
  3. URI для iframe должен выглядеть примерно так:

    /viewer.html?file=blob:19B579EA-5217-41C6-96E4-5D8DF5A5C70B
    

    Теперь FF, Chrome, IE 11 и Edge отображают PDF в средстве просмотра в iframe, переданном через стандартный UIB-код в URL-адрес.

13
задан John Saunders 1 April 2010 в 08:34
поделиться

8 ответов

Нет, класс Thread запечатан . Обоснование этого решения состоит в том, что это настолько сложная и низкоуровневая оболочка вокруг объекта ядра, что вы не должны связываться с ней.

Один вопрос к вам, однако, почему вы хотите переопределить метод Start? Чего вы пытаетесь достичь?

11
ответ дан 1 December 2019 в 17:16
поделиться

Не знаю, почему вы могли бы захотеть это сделать (или даже должны были бы это сделать, если бы это было возможно), но есть способ обойти тот факт, что класс Thread является запечатанным ] - используя методы расширения. С технической точки зрения, это просто добавление перегрузки к группе методов Start (а не переопределение), но это все равно может быть полезно в вашем контексте.

Что-то вроде этого может быть тем, что вам нужно:

public static void Start(this Thread thread, int foo)
{
    // Your code here.

    thread.Start();
}

Затем вы можете просто назвать его так:

var thread = new Thread();
thread.Start(123);
7
ответ дан 1 December 2019 в 17:16
поделиться

Класс Thread закрыт, но вот хороший сайт для изучения потоков . Также обратите внимание на поток Stackoverflow здесь: Ссылка на многопоточность?

5
ответ дан 1 December 2019 в 17:16
поделиться

Нет ...

Класс Thread запечатан ...

[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public sealed class Thread : CriticalFinalizerObject, 
    _Thread

Спасибо

2
ответ дан 1 December 2019 в 17:16
поделиться

Нет, это запечатанный класс, что означает, что вы не можете наследовать от него.

2
ответ дан 1 December 2019 в 17:16
поделиться

Относительно того, зачем кому-то это нужно: многие языки (например, Java) и / или API-интерфейсы потоков (например, Qt) позволяют разработчикам реализовывать потоки путем наследования от базового класса «потока» , а затем перегрузка метода, реализующего процедуру потока.

Широко использовав эту модель в Qt, я на самом деле нахожу ее очень удобной - вместо того, чтобы нацеливать потоки на какую-то функцию или метод, что часто приводит к странным и / или запутанным код, весь поток содержится внутри объекта.

Вот пример кода с использованием Qt API:

class MyThread : public QThread
{
    Q_OBJECT

protected:
    void run();
};

void MyThread::run()
{
    ...something I need threaded...
}

QThread - это базовый класс потоковой передачи Qt. Чтобы использовать MyThread, создайте экземпляр объекта потока и вызовите QThread :: start (). Код, который появляется в повторной реализации run (), затем будет выполняться в отдельном потоке.

What ' В этом хорошо то, что я думаю, это позволяет вам действительно содержать все, что нужно потоку, внутри одного объекта, и (по моему опыту) это создает очень согласованную объектную модель. Я не думаю, что он отвечает всем потребностям, но я был немного удивлен, что C # не имеет такой базовой модели потоковой передачи, если честно.

Я определенно не верю, что класс Thread в C # запечатан из-за сложности ядра ; если Qt может предоставить кроссплатформенную библиотеку потоковой передачи, которая позволяет наследование QThread, я не вижу реальной причины, по которой MSFT не может предоставить такую ​​же возможность в классе потоковой передачи в C #.

Честно говоря, у меня есть такая базовая модель потоковой передачи.

Я определенно не верю, что класс Thread в C # является запечатанным из-за сложности ядра; если Qt может предоставить кроссплатформенную библиотеку потоковой передачи, которая позволяет наследование QThread, я не вижу реальной причины, по которой MSFT не может предоставить такую ​​же возможность в классе потоковой передачи в C #.

Честно говоря, у меня есть такая базовая модель потоковой передачи.

Я определенно не верю, что класс Thread в C # является запечатанным из-за сложности ядра; если Qt может предоставить кроссплатформенную библиотеку потоковой передачи, которая позволяет наследование QThread, я не вижу реальной причины, по которой MSFT не может предоставить такую ​​же возможность в классе потоковой передачи в C #.

22
ответ дан 1 December 2019 в 17:16
поделиться

Я также привык использовать ту же логику в приложениях Java, и имеет серьезный смысл объединить поток в объект, который затем отделяет начало нового процесса от его родительского. Точно так же разочарованный C # не поддерживает этот подход. Дэйв П.

2
ответ дан 1 December 2019 в 17:16
поделиться
using System.Threading;

namespace NGrubb.Threading {

    public abstract class BaseThread {
        private Thread m_thread;

        public BaseThread() {
            m_thread = new Thread( Run );
        }

        public void Start() {
            m_thread.Start();
        }

        protected abstract void Run();
    }
}
11
ответ дан 1 December 2019 в 17:16
поделиться
Другие вопросы по тегам:

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