Forms control member as variable



  • Hallo Forum,

    in u.a. Code möchte ich eine ProgressBar aus einem Thread aufrufen. Der Code funktioniert so. Frage ist, ob es noch eine etwas elegantere Lösung gibt. Die ProgressBar ohne Delegate aufzurufen funktioniert nicht.
    Außerdem möchte ich den Member 'Show' der ProgressBar als Variable übergeben. Lässt sich dafür das Object^ in BeginInvoke verwenden?

    public ref class Form1 : public System::Windows::Forms::Form
    {
    ...
    public: array<ProgressBar^>^ pBars = {progressBar1, ... , progressBar3};
    ...
    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
        tasks[0] = Task::Factory->StartNew((Action<Object^>^)gcnew Action<Object^>(this, &Form1::TaskMethod), _inputParameter, cts->Token);
    }
    
    private: System::Void TaskMethod(Object^ data) {
        int i= 0;
        ProgressBarDelegate^ d = gcnew ProgressBarDelegate(_instance, &Form1::setProgressBar);
        pBars[i]->BeginInvoke(d, gcnew array<Object^> { i });
    ...
    while(true){
    ...
    token.WaitHandle->WaitOne(delay);
    }
    }
    private: System::Void Form1::setProgressBar(int i)
    {
        pBars[ i ]->Show();
    }
    };
    

Anmelden zum Antworten