1

私のwinphoneアプリでは、System.IO.FileNotFoundExceptionファイルに関係のないコードを取得するという奇妙な状況があります。

遅延関数呼び出しを管理するクラスがあります。

// Delayed function manager
namespace Test
{
    public static class At
    {
        private readonly static TimerCallback timer = 
            new TimerCallback(At.ExecuteDelayedAction);

        public static void Do(Action action, TimeSpan delay,
            int interval = Timeout.Infinite)
        {
            var secs = Convert.ToInt32(delay.TotalMilliseconds);
            new Timer(timer, action, secs, interval);
        }

        public static void Do(Action action, int delay, 
            int interval = Timeout.Infinite)
        {
            Do(action, TimeSpan.FromMilliseconds(delay), interval);
        }

        public static void Do(Action action, DateTime dueTime, 
            int interval = Timeout.Infinite)
        {
            if (dueTime < DateTime.Now) return;
            else Do(action, dueTime - DateTime.Now, interval);
        }

        private static void ExecuteDelayedAction(object o)
        {
            (o as Action).Invoke();
        }
    }
}

そして、ProgressIndicator の状態を管理するクラス:

namespace Test
{
    public class Indicator
    {
        public DependencyObject ThePage;
        public ProgressIndicator Progressor;
        public Indicator(DependencyObject page)
        {
            ThePage = page;
            Progressor = new ProgressIndicator();
            SystemTray.SetProgressIndicator(ThePage, Progressor);
        }

        // If set(true) then set(false) in one second to remove ProgressIndicator
        public void set(bool isOn)
        {
            Progressor.IsIndeterminate = Progressor.IsVisible = isOn; // Exception happens on this line
            if (isOn) At.Do(delegate { this.set(false); }, 1000);
        }
    }
}

コードでメソッドを実行しようとするとset(true)、次の例外が発生します。

An exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll and wasn't handled before a managed/native boundary
A first chance exception of type 'System.UnauthorizedAccessException' occurred in System.Windows.ni.dll

なぜこれが起こっているのですか、どうすれば修正できますか?

4

1 に答える 1

5

実際の問題は権限にあるFileNotFoundようです。ファイルの場所のディレクトリを読み取れないために例外が発生している可能性があります。

私は Windows Phone 開発の経験はありませんが、どこSystem.Windows.ni.dllにいても、アプリを実行している権限よりも高い権限が必要だと思います。

アップデート

コール スタック エラー メッセージ - 「Invalid cross-thread access」に基づくと、UI スレッドではない別のスレッドから GUI コンポーネントにアクセス/更新しようとしていることが問題です。コードを次のように変更してみてください。

Deployment.Current.Dispatcher.BeginInvoke(()=>
{ 
    Progressor.IsIndeterminate = Progressor.IsVisible = isOn;
    if (isOn) 
        At.Do(delegate { this.set(false); }, 1000);
}

});
于 2012-12-20T12:58:11.803 に答える