[.NET MAUI] 어플 실행시에 응답없음 창 계속 뜨는거 방법없나요?

Task.Run으로 넘겨도 계속 뜨네요… 아예 창자체가 안뜨게 없애버리거나… 창이 뜨는 이유라도 알 수 있을까요… 대기를 누르면 그냥 실행 되더라구요.?

PC 성능이라도 좀 공유 부탁드려도될까요 ^^;

구체적이고 정확한 질문이 원하는 답을 얻을 가능성이 높아집니다.

PC랑 상관 있는지는 모르겠지만 lg그램 쓰고있구요.

이미 릴리즈처리해서 배포한 상태로 apk를 pda에서 실행할 때 뜨는 에러에요.

pda는 ds70이라는 휴대폰이구

제가 쓰는 vs는 2022 에다가 현재 .net8.0으로 개발했어요.

일단 제가 테스트 계속 해본 결과로는 로그인창 뜨기전에 뜨는 경우가 있고, 로그인 할때 안뜨면, 메인페이지에서 대기할때 뜨거나, 메인페이지에서 다음 페이지로 넘어가서 조회할 때 뜨더라구요… 딱 어디서만 뜨는게 아니라 한번은 꼭뜨고 대기를 누르면 더이상 안뜨긴 했어요.

로그인 페이지에서 메인페이지 넘어갈 때 좀 쿼리를 많이 사용하고 있어서 task.run처리해논 코드가 있구요.
로그인에서 메인으로 넘어갈때 걸리는 시간은 한 3초정도 걸리는거 같아요.

또 하나는 static으로 dictionary 처리해서 한 단어 200개정도 미리 담아두는 부분이 있어요.

그리고 제가 뜬다하는 응답하지 않음은

apk에서 뜨는거라

apk이(가) 응답하지 않음
x 앱 닫기
o 대기

라는 창이 뜨는거에요 pda에서. 대기누르면 아무문제 없이 진행되긴 하는데 자꾸 한번씩 뜨는게 문제가 있는거 같은데 어떤 문제가 있어야 저런게 뜨는지를 전혀 모르겠어요.

코드 자체가 잘못된거같아요. 갤럭시 23 울트라에서도 같은 문제가 생기네요…

초반에 뜨는거보니까 코드를 첨부할게요 ㅠㅠ

마우이 코딩방법에 위반되거나 문제될만한 코드가 있을까요

VIEWMODEL

public LoginViewModel()
{
STOE.InitSetting();
STOE.InitDBSetting(“server”, “dbname”, “name”, “password”);

    loginModel = new LoginModel();
    chBool = new CheckBoxBool();

    logInCommand = new Command(async () => await LoginButtonClicked());
    passPopupCommand = new Command(async () => await PWPopupButtonClicked(), CanSave);
    passPopupCommand2 = new Command(async () => await PWPopupButton2Clicked(), CanSave);
    autoLoginCommand = new Command(AutoLoginClicked);
    loginCompleteCommand = new Command(async (sender) => await LoginCompleted(sender));

    chBool.IsChecked = STOE.loginSave;
    if (STOE.loginSave == true)
    {
        loginModel.Sabun = STOE.Sabun;
    }
    RaisePropertyChagned(nameof(LoginModel));
    IsEnable = false;
    IdFocused = true;
}


-------------------------------------------
CommonFunc

public static void InitSetting()
{
    loginSave = Preferences.Get(nameof(loginSave), false);
    Sabun = Preferences.Get(nameof(Sabun), "");
}

public static async void InitDBSetting(string server, string dbname, string dbid, string dbpw)
{
    ServerIP = server;
    DataBaseName = dbname;
    DataBaseID = dbid;
    DataBasePass = dbpw;

    DictCCList = new Dictionary<string, DictCC>();
    DictErrMsgList = new Dictionary<string, DictErr>();

    try
    {
        DLSql dLSql = new DLSql();

        await Task.Run(async () =>
        {
            await dLSql.SqlDictionarySetting();
            await dLSql.SqlDictionaryErrorSetting();
        });
    }
    catch (Exception ex)
    {
        await Shell.Current.DisplayAlert("Error", ex.Message, "Confirm");// "Ok");
        Environment.Exit(0);
    }
}


    public async Task SqlDictionarySetting()
{
//약 200개
    try
    {
        SqlString = "";//초기세팅용;

        string sqlText = $@"SELECT KOREAN, SPANISH, CHINA, ENGLISH FROM LANGUAGEBOX (NOLOCK) ORDER BY KOREAN";
        DataTable sqlTable = new DataTable();
        using var sqlconnection = new SqlConnection(SqlString);
        sqlconnection.Open();
        using var sqlcommand = new SqlCommand(sqlText, sqlconnection);
        sqlcommand.CommandType = CommandType.Text;
        using var datareader = sqlcommand.ExecuteReader();
        sqlTable.Load(datareader);
        sqlconnection.Close();

        foreach (DataRow dr in sqlTable.Rows)
        {
            STOE.DictCCList.Add(dr["KOREAN"].toStr(), new DLProperty.DictCC(dr["SPANISH"].toStr(), dr["CHINA"].toStr(), dr["ENGLISH"].toStr()));
        }
    }
    catch (Exception)
    {
        throw;
    }
}

  public async Task SqlDictionaryErrorSetting()
{
//약 200개
    try
    {
        SqlString = "";//초기세팅용;
        string sqlText = $@"SELECT ASGUB, ASDES, AREF1 FROM LANGUAGEBOX2 WHERE ADGUB='99'";

        DataTable sqlTable = await SqlTable(sqlText);

        foreach (DataRow dr in sqlTable.Rows)
        {
            STOE.DictErrMsgList.Add(dr["ASGUB"].toStr(), new DLProperty.DictErr(dr["ASDES"].toStr(), dr["AREF1"].toStr()));
        }
    }
    catch (Exception)
    {
        throw;
    }
}

---------------------------------
View


LoginViewModel logView;
public LoginPage()
{
    InitializeComponent();
}

protected override async void OnAppearing()
{
    base.OnAppearing();

    var page = Shell.Current.CurrentPage;
    using var popup = new LoadingPopup();
    page.ShowPopup(popup);

    await Task.Run(async () =>
    {
        logView = new LoginViewModel();
        this.BindingContext = logView;

        await Task.Delay(3000);
    });
}

윈도우는 메시지 펌프가 3초 정도 돌지 못하면 응답없음 뜹니다.
시간 걸리는 작업은 워커 쓰레드로 돌리거나 중간에 메시지 펌핑 해야…

앗 그런건가요?
감사합니다. ㅠㅠ
인터넷 찾아봐서 처리해볼게요

다들 감사합니다 ㅠㅠ 덕분에 해결된거같아요 에러메시지 안뜨네요!!!

1 Like