等待一些可变时间完成后再继续方法

时间:2011-10-22 13:14:06

标签: objective-c multithreading cocoa asynchronous

我需要能够在等待用户输入时暂停方法。

我尝试使用while (true)循环检查是否设置了布尔值,表明操作已完成,但正如我预测的那样,它使应用程序无响应。

如何在设置变量后暂停和恢复方法,而无需再次调用方法,也不会使整个应用程序无响应。

这基本上是程序的作用

openFile method called
openFile method determines whether file has a password
if it does, display an alert to the user requesting the password

这是问题,在输入密码之前暂停该方法。

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

为什么要暂停该方法?你可以使用一个代表。您将显示警报视图并注册警报视图的代理。委托注册didDismissAlertViewWithButtonIndex方法并根据按钮执行操作。如果密码输入正确并且点按了OKAY按钮,则可以继续进行处理。

答案 1 :(得分:0)

你做不到。您需要将其拆分为两种方法,一种是进行初始检查,然后提示输入密码,另一种是使用密码来获取文件。

答案 2 :(得分:0)

您可能需要以下内容。

 class Program
    {
        static void Main(string[] args)
        {
        }

        void YourFileReadMethod()
        {
            string password = string.Empty;
            bool isPasswordProtected = CheckFileIsPasswordProtected();
            if (isPasswordProtected)
            {
                Form passwordFrm = new Form();//This is your password dialogue
                DialogResult hasEntered = DialogResult.No;
                do
                {
                    hasEntered = passwordFrm.ShowDialog();
                    password = (hasEntered == DialogResult.Yes) ?
                        passwordFrm.passwordTxt//password property/control value;
                        : string.Empty;
                } while (hasEntered != DialogResult.Yes);
            }
            ReadFileMethod(password);
        }

        private void ReadFileMethod(string password)
        {
            //use the password value to open file if not String.Empty
        }
        bool CheckFileIsPasswordProtected()
        {            
            //your logic which decides whether the file is password protected or not
            //return true if password is required to open the file

            return true;
        }
    }