后台代理静态变量值不同

2023-12-02

我有一个应用程序,可以显示一些数据并启动后台代理来动态更新动态图块。由于动态图块内容是在后台代理中使用从主线程填充的一些变量创建的,因此我决定(也许这是一个错误的决定,但这是我认为唯一合理的决定)编写一个具有静态变量和属性的类以在主线程之间共享线程和后台代理。 现在的问题是我在主线程中编写了一个变量值,但是当后台代理执行时发现该值为空。为什么?
我举一个小例子,希望你能理解。

静态部分

public class Vars
{
    public static IEnumerable<Contact> Contacts;
    public static void Test()
    {
        int num = Contacts == null ? -2 : Contacts.Count();
        // num is -2 here because Contacts is null !!
    }
}

背景特工

public class TileAgent : ScheduledTaskAgent
{
    protected override void OnInvoke(ScheduledTask task)
    {
        // It's necessary to use BeginInvoke to avoid Cross-thread errors
        Deployment.Current.Dispatcher.BeginInvoke(() =>
        {
            Vars.Test();
        });

        NotifyComplete();
    }
}

主页

public partial class MainPage : PhoneApplicationPage
{
    private void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
    {
        busyIndicator.IsRunning = false;
        try
        {
            Vars.Contacts = e.Results
                .Where(.........);
            ContactResultsData.DataContext = Vars.Contacts;
            // Vars.Contacts.Count() = 67 here !!!

            if (Vars.GetTile() != null)
                StartAgent();
        }
        catch (System.Exception)
        {
            // That's okay, no results
        }
    }
    private void ContactResultsData_Tap(object sender, GestureEventArgs e)
    {
        int num = Vars.Contacts == null ? -2 : Contacts.Count();
        // num = 67 here !!
   }
}

我的代码有什么问题吗?有更好的方法来完成我的任务吗?
考虑到我在 Windows Phone 上工作还不到一个月,所以我确信我仍然在做非常糟糕的事情......

UPDATE:
在放置正确的锁以避免不同线程的并发读/写之后,我决定将显式静态构造函数放入静态类

public class Vars
{
    static Vars()
    {
        Debug.WriteLine("init");
    }
}

每次调用后台代理时都会调用此方法!
这解释了我将变量视为 null 的原因,但我不明白:为什么每次都会重新创建静态类?
难道是因为后台代理位于dll项目内(需要运行它)?
有没有一种方法可以使一个仅在第一次创建的类可以在不同线程之间共享(在这种情况下它们是进程吗?)?


经过长时间的寻找,我终于找到了article陈述:

由于我们的 EvenTiles 应用程序及其周期性任务正在运行 独立的进程,它们彼此完全分开, 这意味着他们得到了自己想要的变量副本 访问,即使这些变量是在单独的项目中定义的。

因此,不可能使用“简单”静态变量/属性在主应用程序和周期性任务之间共享数据;我们必须读/写数据库或独立存储或任何我们喜欢的东西。

我觉得这很疯狂,但这就是故事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

后台代理静态变量值不同 的相关文章

  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 如何在 C++ 中的文件末尾添加数据?

    我已按照网上的说明进行操作 此代码应该将输入添加到文件 数据库 的末尾 但当我检查时 数据会覆盖现有数据 请帮忙 这是我的代码 int main string name string address string handphone cou
  • 使用 Unity 在构造函数中使用属性依赖注入

    好的 我在基类中定义了一个依赖属性 我尝试在其派生类的构造函数内部使用它 但这不起作用 该属性显示为 null Unity 在使用 container Resolve 解析实例后解析依赖属性 我的另一种选择是将 IUnityContaine
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • C++中的类查找结构体数组

    我正在尝试创建一个结构数组 它将输入字符串链接到类 如下所示 struct string command CommandPath cPath cPathLookup set an alarm AlarmCommandPath send an
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 如何对 Web Api 操作进行后调用?

    我创建了一个 Web API 操作 如下所示 HttpPost public void Load string siteName string providerName UserDetails userDetails implementat
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良

随机推荐

  • 如何在 Liferay 7 中添加新语言?

    我的问题是如何添加新语言 例如泰语liferay 7 当我检查现有标志时 我发现图像不是 png 而是 svg 但我无法使用图标添加新语言 在这个page jsp我看到图像的构造函数是自动生成的 这段代码描述了svg图像的生成
  • 获取 Windows ‘ShFileOperation’ API 在 Delphi 中递归删除文件

    我正在使用以下代码删除大量文件 function FastDelete const fromDir string Boolean var fos TSHFileOpStruct begin ZeroMemory fos SizeOf fos
  • 如何复制进程的标准输出(复制,而不是重定向)?

    有很多示例展示了如何重定向另一个应用程序的标准输出 但是 我想让应用程序保留其标准输出 并且仅在父进程中检索标准输出的副本 这可能吗 我的场景 我有一些测试 使用 Visual Studio Test Runner 启动外部进程 服务器 来
  • 有没有办法创建 ColoredCheckbox 组件?

    我正在尝试创建一个可重复使用的material ui彩色复选框组件 您将十六进制颜色传递给组件 它会影响复选框颜色 到目前为止我已经明白了 但我想不出一种将颜色传递给 withStyles 的方法 const WhiteCheckbox w
  • 提取两个相似标题之间具有特定单词的段落

    我的文本文件包含类似这样的段落 summary A result oriented and dedicated professional with three years experience in Software Development
  • 将目标添加到导航栏中的后退按钮

    我正在设置标题和后退按钮的值UINavigationBar如下 self navigationItem title Post self navigationController navigationBar setTitleTextAttri
  • 是否可以从 C# 读取内部 CPU 滴答计数器?

    我有一个多线程 C 程序 我需要记录每个线程在特定自旋等待锁中花费的时间间隔 我知道有一些方法可以从 C 或汇编程序执行此操作 但是是否可以以某种方式直接从 C 访问相同的计数器 也就是说 无需通过 Stopwatch 类 我假设调用 St
  • 如何重命名 xcode 方案并保持 Git 提交正常工作?

    更新 我将此作为错误报告给 Apple 他们修复了它 所有这些在 xCode 4 5 中似乎都可以正常工作 历史学家可以继续读下去 我非常想在 xCode 4 3 中重命名 iOS 项目的构建方案 我已成功重命名该项目 然后我可以重命名目标
  • 获取星期一和星期日等..作为 Unix 中任何日期的一周参数

    如何获取某个日期一周中的星期一和星期日的日期 这给出了 最后 星期一的日期 date dlast monday Y m d 我想传递一个日期作为参数查找该周的星期一和星期日 基本上 我想要一周的周日和周一 任何日期 不仅仅是上周一 尝试这个
  • 如何将字符串从 HTML 传递到 Python 并返回到 HTML

    背景 我创建了一个非常简单的前端 用户可以在其中输入字符串 输入并单击 检查 按钮后 我想将此字符串作为 JSON 传递到 python 字符串 在其中执行 SQL 查找 根据 SQL 的外观 python 脚本应该传递一个布尔值 该值应该
  • 获取编译时已知的特定长度的切片

    在此代码中 fn unpack u32 data u8 gt u32 assert eq data len 4 let res data 0 as u32 data 1 as u32 lt lt 8 data 2 as u32 lt lt
  • 带有 C# ImageFormat 类的 WebP 图像

    我正在从网络下载图像以将其保存在本地 它适用于任何其他图像格式 但当我尝试读取 WebP 图像时 下面的方法会失败并出现参数异常 private static Image GetImage string url try HttpWebReq
  • 包容性和排除性的区别?

    我觉得这是一个简单的概念 但我在包容性和排他性方面遇到了麻烦 特别是关于随机数生成器 例如 如果我想要一个值 2 8 包括 2 和 8 那么这将是包容性的 对吗 该代码看起来怎么样 像这样的事情 nextInt 8 2 2 例如 如果我想要
  • 从一元数据创建二元(关系)数据

    我的冲突数据看起来像这样 conflict ID country code SideA 1 1 1 1 2 1 1 3 0 2 4 1 2 5 0 现在我想将其变成如下所示的二元冲突数据 SideA 1 应该是country code 1
  • 如何使用 PHP 创建随机字符串?

    我知道 PHP 中的 rand 函数生成随机整数 但是生成随机字符串的最佳方法是什么 例如 原始字符串 9 个字符 string abcdefghi 限制为 6 个字符的随机字符串示例 string ibfeca 更新 我发现了大量这些类型
  • 使用 documentFragment 的 IE 性能不佳

    为了测试 DOM 操作与innerHTML 我使用了这个小测试方法documentFragment web page 追加 10000href元素到一个div元素 对于 Chrome 或 Firefox 性能还可以 但在 IE 10 9 8
  • PhpStorm 和 XAMPP - 调试未启动

    我在使用 PhpStorm 调试器时遇到了困难 我阅读了他们所有的文档 并且我已经正确设置了调试 根据phpinfo 调试定制安装报告和 PhpStorm 分析 但是 无论我尝试什么 调试器都不会触发 我的设置如下 我将 XAMPP 文档根
  • 如何传递定义为常量的数组的引用?

    我定义了哈希和数组常量 当将它们传递给函数时 我必须将它们作为引用传递 不过我想知道正确的语法是什么 考虑这个例子 usr bin perl use strict use warnings use constant AC gt qw a b
  • 使用 sqlalchemy 查询特定 JSON 列 (postgres)

    我有一个带有 JSON 字段的模型 class Item db Model data db Column JSON nullable False 数据包含一些 JSON 例如 cost 10 00 passengers 2 surcharg
  • 后台代理静态变量值不同

    我有一个应用程序 可以显示一些数据并启动后台代理来动态更新动态图块 由于动态图块内容是在后台代理中使用从主线程填充的一些变量创建的 因此我决定 也许这是一个错误的决定 但这是我认为唯一合理的决定 编写一个具有静态变量和属性的类以在主线程之间