Время выполнения.NET внутренне отображается на win32 вызовы функции?

В вашем случае нет необходимости добавлять какие-либо дополнительные переменные, измените код на.

public class MainActivity extends Activity {

    private final int[] SOUNDS = {R.raw.blizzardlowquaility, R.raw.onebite_dansgaming, R.raw.nagur_dansgaming};
    private final int LOW = 0;
    private final int HIGH = 3;

    private MediaPlayer mMediaPlayer;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageButton Testy = findViewById(R.id.imageButton);
        Testy.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mMediaPlayer == null) {
                    int random = (new Random()).nextInt(HIGH - LOW) + LOW;
                    mMediaPlayer = MediaPlayer.create(getApplicationContext(), SOUNDS[random]);
                    mMediaPlayer.start();
                } else {
                    mMediaPlayer.stop();
                    mMediaPlayer.release();
                    mMediaPlayer = null;
                }
            }
        });
    }
}
10
задан tyler 27 April 2009 в 08:09
поделиться

7 ответов

Это смесь. Очевидно, что такие вещи, как winforms, в значительной степени являются обертками вокруг функциональности Win32 (или смеси обоих миров), но WPF намного более управляем (с точки зрения фактического управляющего кода), под капотом, как отмечает Мэш, он может использовать DirectX для рендеринг). Аналогично, такие вещи, как доступ к файлу / сети, являются (по необходимости) обертками вокруг объектов ОС, как и объекты неуправляемой блокировки, такие как Mutex , но многие другие вещи управляются на 100%.

Так что это не так. простой ответ.

(правка) Кроме того, имейте в виду, что «.NET» - очень расплывчатый термин; Compact Framework, Micro Framework, Silverlight и т. Д. Могут иметь различные реализации, отличные от win32.

17
ответ дан 3 December 2019 в 13:51
поделиться

Обновление: поняла, что я ответила на неправильный вопрос (вы сказали, что среда выполнения не библиотека классов) ... о, ну, в любом случае, я оставлю болванку ниже

Это зависит от часть библиотеки:

  • Библиотека System.Xml не не использует MSXML
  • System.Reflection не будет, поскольку все это основано на IL
  • System.Text делает и не делает. Есть некоторые «быстрые» вызовы для работы со строками
  • System.Text.RegularExpressions этого не делает, подобно пространству имен XML, все это настраивается с помощью внутреннего класса RegexRunner.
  • System.Diagnostics использует вызовы kernel32.dll, такие как CreateProcess
  • Пространство имен System.IO также выполняет pinvoke
  • System.Threading использует внутренние вызовы методов, которые в конечном итоге (внутри CLR) будут вызывать методы winapi
  • System.Windows.Forms является смесью, но в конечном итоге использует GDI
  • System. Net (NetworkStream) использует ws2_32.dll, такой как WSARecv (..)

Это просто из-за возни с Reflector. Очевидно, что в качестве COM-сервера Microsoft CLR также сильно зависит от win32.

6
ответ дан 3 December 2019 в 13:51
поделиться

.NET-приложение - это просто еще один процесс Win32, поэтому в этом нет никакой магии, и, очевидно, он будет использовать операционную систему подчеркивания. Даже библиотеки .NET в значительной степени используют Win32.

Примеры:

  • Управление памятью осуществляется внутренне для управляемого кода, но для сам процесс это обрабатывается просто как и любой другой процесс Win32.

  • В настоящее время управляемые темы также реализован как потоки ОС.

6
ответ дан 3 December 2019 в 13:51
поделиться

Да, он вызывает функции win32 внутренне. Например, метод OpenRead в классе File содержит:

    return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);

и в конечном итоге он вызовет:

    SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);

, которая является нативной функцией win32, глубоко в методе.

3
ответ дан 3 December 2019 в 13:51
поделиться

В некоторых случаях (в большинстве случаев, может быть, я не отражал всю структуру) .NET Framework делает вызовы win32. Большинство элементов управления - это просто элементы управления win32, снабженные несколькими новыми функциями.

5
ответ дан 3 December 2019 в 13:51
поделиться

Mono является реализацией среды выполнения .net, и она определенно не соответствует вызовам функций win32 (по крайней мере, в Linux)

Я полагаю, ваш вопрос имел в виду Внедрение Microsoft среды выполнения .net.

2
ответ дан 3 December 2019 в 13:51
поделиться

Он вызывает .NET API, как и все приложения Windows. Но это больше, чем просто обертка или карта, более точно она описывается как абстракция.

1
ответ дан 3 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

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