Передача данных в пользовательский интерфейс Winforms с помощью BeginInvoke - PullRequest
2 голосов
/ 29 апреля 2010

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

public class GUIController
{   
    private My_Main myWindow;


    public GUIController( My_Main window )
    {
        myWindow = window;
    }

    public void UpdateProducts( List<myProduct> newList )
    {
        object[] row = new object[3];

        foreach (myProduct product in newList)
        {
            row[0] = product.Name;
            row[1] = product.Status;
            row[2] = product.Day;

            //HOW DO I USE BeginInvoke HERE?
       }
    }
}

И класс формы ниже:

public class My_Main : Form
{
    //HOW DO I GO ABOUT USING THIS DELEGATE?
    public delegate void ProductDelegate( string[] row );
    public static My_Main theWindow = null;

    static void Main(  )
    {            
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        theWindow = new My_Main();
        Application.Run(theWindow);

    }

    private void My_Main_Load( object sender, EventArgs e )
    {            

        /// Create GUIController and pass the window object
        gui = new GUIController( this );
     }

    public void PopulateGrid( string[] row )
    {
        ProductsGrid.Rows.Add(row);
        ProductsGrid.Update();

    }
}

1 Ответ

1 голос
/ 29 апреля 2010

Как это:

myWindow.BeginInvoke(new My_Main.ProductDelegate(myWindow.PopulateGrid), new object[] { row });

Однако вы должны использовать Invoke / BeginInvoke, только если ваш код работает в фоновом потоке.

Если ваш метод UpdateProducts выполняется в потоке пользовательского интерфейса, вам не нужно BeginInvoke; вы можете просто вызвать метод как обычно:

myWindow.PopulateGrid(row);

Если вы вызовете BeginInvoke, вам потребуется для создания отдельного экземпляра массива в каждой итерации путем перемещения объявления row внутри цикла.

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