C# как получить элементы массива в другом классе - PullRequest
0 голосов
/ 01 марта 2020

У меня есть две страницы, на первой странице я декодирую файл, из которого я получаю координаты, и записываю их в массив. Я хочу использовать этот массив в другом классе.

public sealed partial class FileManagerPage : Page
{
    public float[] arr;
    public struct _arrayByte...
    static int Decode_dy(byte b0, byte b1, byte b2)...
    static int Decode_dx(byte b0, byte b1, byte b2)...
    private async void FileList_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        _arrayByte _bytes;
        StorageFolder externalDevices = KnownFolders.RemovableDevices;
        IReadOnlyList<StorageFolder> externalDrives = await externalDevices.GetFoldersAsync();
        StorageFolder usbStorage = externalDrives[0];
        StorageFile file1 = await usbStorage.GetFileAsync(fileList.SelectedItem.ToString());
        if (file1 != null)
        {
            var buffer1 = await FileIO.ReadBufferAsync(file1);
            byte[] buf1 = WindowsRuntimeBufferExtensions.ToArray(buffer1);
            int FileLenght = ((((buf1.Length - header) / 3) * 3) + header);
            MassLenght_x_y = ((FileLenght - header) / 3) * sizeof(int) * 2;
            int dx,dy,k = 0;
            float ix,iy = 0;
            int[] a = new int[MassLenght_x_y];
            arr = new float[MassLenght_x_y];
            MassLenght_x_y = ((FileLenght - header) / 3) * sizeof(int) * 2;
            if (MassLenght_x_y > 0) Array.Clear(a, 0, a.Length); //Очистить массив
            for (int i = header; i < FileLenght; i += 3, k += 2)
            {
                _bytes.b0 = buf1[i];
                _bytes.b1 = buf1[i + 1];
                _bytes.b2 = buf1[i + 2];
                dx = Decode_dx(_bytes.b0, _bytes.b1, _bytes.b2);
                dy = Decode_dy(_bytes.b0, _bytes.b1, _bytes.b2);
                a[k] = dx; 
                a[k + 1] = dy;
                ix = ix + dx;
                iy = iy + (-1 * dy);
                arr[k] = ix;
                arr[k + 1] = iy;
            }
        }
        else
        {
            return;
        }
    }
}

Я хочу прочитать массив "arr" в другом классе

public sealed partial class Win2DPage : Page
{
    ...
    private void CanvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
    {
        if (!Window.Current.Visible) return;
        float x0, y0, x1, y1;
        for (int a = 0; a < MassLenght_x_y; a += 4)
        {
            if (a >= 4)
            {
                a = a - 2;
                x0 = 300f + 0.3f * arr[a]; //error
                y0 = 300f + 0.3f * arr[a + 1];
                x1 = 300f + 0.3f * arr[a + 2];
                y1 = 300f + 0.3f * arr[a + 3];
                args.DrawingSession.DrawLine(x0, y0, x1, y1, Colors.Red);
            }
            else
            {
                x0 = 300f + 0.3f * arr[a]; //error
                y0 = 300f + 0.3f * arr[a + 1];
                x1 = 300f + 0.3f * arr[a + 2];
                y1 = 300f + 0.3f * arr[a + 3];
                args.DrawingSession.DrawLine(x0, y0, x1, y1, Colors.Red);
            }
        }
        CanvasControl.Invalidate();
    }
}

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

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Как я понимаю, вы работаете с веб-формой. Если вы хотите передавать данные с одной веб-страницы на другую веб-страницу в asp веб-форме, вы можете использовать один из следующих способов:

  1. Cookies
  2. QueryString
  3. Сеансы
  4. Межстраничное размещение
  5. Server.Transfer

для вашего сценария Я думаю, что сеансы лучший выбор, потому что ваш массив может иметь большой размер, отправляя его клиенту и получая на стороне сервера, будет иметь плохую производительность при размере страницы и загрузке

EDIT, если вы работаете в UWP, поэтому вы должны передавать данные при вызове например, мы используем метод навигации: мы создаем класс параметров:

public class MyParams
{
public MyParams(){}
public string Name { get; set; }
}

, поэтому, когда мы хотим перейти на другую страницу, сначала создайте объект из класса MyParams и передайте метод навигации:

var param = new MyParams(){
    Name = "Mostafa"
}
Frame.Navigate(typeof(Win2DPage), param);

и теперь вы можете читать значения параметров в Win2DPage, просто вам нужно переопределить метод OnNavigatedTo, как показано ниже:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var parameters = (MyParams)e.Parameter;
// parameters.Name    
}
0 голосов
/ 01 марта 2020

Вы можете использовать свой массив как переменную stati c и записать эти координаты в массив stati c. Позже, когда вы читаете это в другом классе, вы просто звоните

FirstPageClass.YourStaticVariable

, и вы получите свои значения. Но если вы поступите таким образом, убедитесь, что значения уже прочитаны и установлены в эту переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...