【问题标题】:OpenSilver and Dispatcher.CheckAccessOpenSilver 和 Dispatcher.CheckAccess
【发布时间】:2022-09-28 15:53:06
【问题描述】:

我正在将旧的 Silverlight 应用程序移植到 OpenSilver。在整个 Silverlight 代码中有 if( <control>.CheckAccess())... 以确保位于正确的线程上。我的印象是在 OpenSilver 中不再需要此检查吗?换句话说,以下 Silverlight 代码可以转换为以下内容:

是的,我知道基于回调的异步方法已被等待任务取代。我将在下一个问题here 中询问有关该转换的一些问题。这个问题完全是关于 Dispatcher.CheckAccess 的命运

银光:

private void GetNextImage()
{
    var cmc = ServiceFactories.CreateCartManager();
    cmc.getSlideImageCompleted += (s, e) =>
    {
        if (imageGrid.CheckAccess())
        {
            cmc_getSlideImageCompleted(s, e);
        }
        else
        {
            var args = new object[] { s, e };
            imageGrid.Dispatcher.BeginInvoke(new getSlideImageCompletedDelegate(cmc_getSlideImageCompleted),
                args);
        }
    };

    var lastTime = SystemSettings.GetInstance().SlideShowData.LastImageTime;
    cmc.getSlideImageAsync(string.IsNullOrEmpty(lastTime) ? null : lastTime);
}

到 OpenSilver:

private void GetNextImage()
{
    var cmc = ServiceFactories.CreateCartManager();
    cmc.getSlideImageCompleted += (s, e) =>
    {
            cmc_getSlideImageCompleted(s, e);
    };

    var lastTime = SystemSettings.GetInstance().SlideShowData.LastImageTime;
    cmc.getSlideImageAsync(string.IsNullOrEmpty(lastTime) ? null : lastTime);
}

    标签: c# .net silverlight dispatcher


    【解决方案1】:

    没有必要使用Dispatcher.CheckAccess,因为OpenSilver 当前是单线程的(它使用还不支持线程的mono.wasm 运行时)。

    但是,OpenSilver 保持与 Silverlight 的兼容性,因此如果您有一个旧的 Silverlight 代码进行检查,您可以保留它(在浏览器中运行时它总是返回 true)。

    【讨论】:

      猜你喜欢
      • 2022-06-24
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多