第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何從回調(diào)方法將進(jìn)度傳回 UI

如何從回調(diào)方法將進(jìn)度傳回 UI

PHP
慕的地8271018 2024-01-20 21:29:30
我正在開(kāi)發(fā)一個(gè)應(yīng)用程序,該應(yīng)用程序使用 Jeff Kluge 的 WimgApi 包將 Windows 映像應(yīng)用到磁盤(pán)。我在獲取示例回調(diào)方法來(lái)更新 UI 組件時(shí)遇到問(wèn)題,特別是表單上的標(biāo)簽(最好是進(jìn)度條)。我嘗試使用委托來(lái)設(shè)置值,但這似乎不起作用,因?yàn)槲覠o(wú)法弄清楚如何將委托傳遞給回調(diào)方法。如果我將回調(diào)方法設(shè)置為非靜態(tài),我可以訪問(wèn)表單屬性,但隨后我會(huì)遇到死鎖,即使我禁用死鎖打破,它也會(huì)鎖定。我被告知要考慮使用 IProgress 和 async,但是雖然我可以更改代碼以異步運(yùn)行該方法(這有效并且 UI 不會(huì)鎖定),但我仍然無(wú)法弄清楚如何讓 MyCallbackMethod 將信息發(fā)送回用戶界面。//Apply Image Methodpublic void ApplyImage()        {            using (WimHandle wimHandle = WimgApi.CreateFile(@"C:\osimages\test.wim",                WimFileAccess.Read,                WimCreationDisposition.OpenExisting,                WimCreateFileOptions.None,                WimCompressionType.None))            {                // Always set a temporary path                WimgApi.SetTemporaryPath(wimHandle, Environment.GetEnvironmentVariable("TEMP"));                // Register a method to be called while actions are performed by WIMGAPi for this .wim file                WimgApi.RegisterMessageCallback(wimHandle, MyCallbackMethod);                try                {                    // Get a handle to the first image in the .wim file                    using (WimHandle imageHandle = WimgApi.LoadImage(wimHandle, 1))                    {                        // Apply the image contents to C:\Apply                        // This call is blocking but WIMGAPI will be calling MyCallbackMethod() during the process                        WimgApi.ApplyImage(imageHandle, @"X:\", WimApplyImageOptions.None);                    }                }                finally                {                    // Be sure to unregister the callback method                    //                    WimgApi.UnregisterMessageCallback(wimHandle, MyCallbackMethod);                }            }如果我嘗試在回調(diào)方法中訪問(wèn)標(biāo)簽屬性,我會(huì)收到“非靜態(tài)字段、方法或?qū)傩?form1.progressLabel.text 需要對(duì)象引用”。我嘗試創(chuàng)建委托,但似乎在訪問(wèn)回調(diào)中的方法時(shí)遇到問(wèn)題。我觀看了幾個(gè)視頻并嘗試了解有關(guān)委托、回調(diào)和 async/backgroundworker 等內(nèi)容的 msdn 文檔,但我似乎更加困惑。非常感謝我應(yīng)該關(guān)注的任何指示/事情。
查看完整描述

2 回答

?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊

免責(zé)聲明:我對(duì) WimgApi 軟件包沒(méi)有任何經(jīng)驗(yàn)。但是該方法存在重載,WimgApi.RegisterMessageCallback該方法采用將傳遞給回調(diào)的任意對(duì)象。所以請(qǐng)嘗試這個(gè):


WimgApi.RegisterMessageCallback(wimHandle, MyCallbackMethod, this);

并在回調(diào)中:


var form = (MyForm)userData;

if (form.InvokeRequired)

{

    form.Invoke((MethodInvoker)(() => UpdateProgressUI(...)));

}

else

{

    form.UpdateProgressUI(...);

}


查看完整回答
反對(duì) 回復(fù) 2024-01-20
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

在這里做出一些假設(shè),但如果您一次只顯示一個(gè)進(jìn)度表單,那么您應(yīng)該能夠避免存儲(chǔ)對(duì)其的靜態(tài)引用。IE:


class ProgressForm

{

    private static ProgressForm staticRef;


    private void Form_Loaded(object sender, EventArgs e)

    {

        staticRef = this;

    }


    private void InternalCallback(uint m, IntPtr w, IntPtr l, IntPtr u)

    {

        // Ensure we're touching UI on the right thread

        if (Dispatcher.InvokeRequired)

        {

            Dispatcher.Invoke(() => InternalCallback(m, w, l, u));

            return;

        }


        // Update UI components

        // ....

    }


    private static uint StaticCallback(uint m, IntPtr w, IntPtr l, IntPtr u)

    {

        staticRef?.InternalCallback(m, w, l, u);


        return 0;

    }

}


查看完整回答
反對(duì) 回復(fù) 2024-01-20
  • 2 回答
  • 0 關(guān)注
  • 180 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)