小编Sim*_*One的帖子

如何锁定多个线程中使用的变量

我在这里严重问了一个问题锁定多个线程中的变量,所以为了清楚起见,我将在这里问它并希望我能正确地问它.

classA
  creates instance of classB
  has methodA that can update & uses classB's myVar
  has methodB that can update & uses classB's myVar

classB
  has a variable myVar
Run Code Online (Sandbox Code Playgroud)

methodA和methodB都可以在不同的线程中运行(在main的新线程中调用).我如何确保这是线程安全的?

c# multithreading locking

15
推荐指数
1
解决办法
3万
查看次数

锁定多个线程中的变量

我是C#的新手,我想询问我是否在MULTI THREADS(伪代码)中遇到这种情况:

public class ClassA
{
     ClassB c = new ClassB();
     public void someMethod()
     {
          c.myVar = 1;
          // Some other stuff
          c.myVar = 0;
     }
}

public class ClassB
{
     internal int myVar;

     public void MethodA()
     {
        if(myVar = 1)
              myVar = 0;
     }
}
Run Code Online (Sandbox Code Playgroud)

如果someMethod()MethodA()可以在单独的线程中处于活动状态,则MethodA()可以将if语句评估为true; 但在它设置之前myVar = 0,someMethod()设置myVar = 0为不正确设置myVar为0 MethodA()!!

基本上,我如何锁定myVar:

  • 我可以lock{}myVar"财产(设置,获取)
  • 我需要使用Interlock(Interlock …

c# variables multithreading locking

7
推荐指数
2
解决办法
2万
查看次数

C#多线程 - 使用后台事件更新GUI

我是C#和多线程的新手,所以我很抱歉,如果这是一个重复的问题,但作为一个新手,看来我的问题与我读过的其他人略有不同.

我的GUI在一个(主)线程中运行.它调用一个后台任务(在一个dll中 - 我也在编写),它在一个单独的线程中运行.dll不了解GUI(即它不能引用GUI类).

现在,假设我想根据dll线程的状态更新GUI上的进度条 - >我正在做的是在dll中创建一个每X%将触发的事件,GUI将订阅此事件.触发事件时,GUI将更新进度条.

我的问题:

  1. 创建事件的方法是最好的方法(记住dll不能引用GUI)?
  2. 如何确保我的上述方法是"事件安全"?我应该在事件中传递进度百分比以确保线程安全吗?还是有更多信息?
  3. 更新GUI时是否需要使用Invoke?我看到一篇帖子提示我做了但我不明白为什么因为更新栏是在GUI线程中完成的??!

希望你能为我澄清一下!

谢谢

c# multithreading

5
推荐指数
1
解决办法
6334
查看次数

asyncio - 重新引发任务异常

我正在使用 asyncio 进行一些 TCP 通信。我有一个无限循环的Receive()函数。read()这作为后台任务运行,使用asyncio.create_task(Receive()).

现在,如果连接被对等方关闭,则会引发异常(或者可能是任何其他异常),我在函数中捕获该异常Receive()。但是,我想重新引发该异常,以便外部代码可以决定要做什么(例如重新连接)。

由于异常是在任务中引发的,我不知道如何检索它。

我试图创建一个例子来说明我的意思:

import asyncio

async def divide(x):
    try:
        return 1/x
    except Exception as e:
        print("Divide inner exception: ", e)
        raise   # Re-raise so main() can handle it

async def someFn():
    asyncio.create_task(divide(0))  # Exception is never retrieved
    # await divide(0) # This will raise two exceptions - the original in divide() and in main()

async def main():
    try:
        await someFn()
        # Do other things while someFn() runs …
Run Code Online (Sandbox Code Playgroud)

python python-asyncio

5
推荐指数
1
解决办法
1876
查看次数

适当使用Monitor.Exit

void MethodA()
{
   Monitor.Enter(this);
   if(someCondition)
   {
       Monitor.Exit(this);
       // This point
       MethodB();
    }
    else
    {
        // Set some values only
 Monitor.Exit(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我有上面的方法可以在多线程中调用:

  • 假设线程1处于 //This point
  • Monitor.Enter当线程1仍在时,另一个线程进入//This point
  • 这会停止MethodB执行吗?如果是,是否有办法MethodB执行.

我需要MethodA在执行前释放,MethodB()因为我不能等到发布之前MethodB完成MethodA.另外,我无法MethodB在新线程中开始.

c# multithreading

4
推荐指数
1
解决办法
143
查看次数

克隆解析服务器对象

我有一个 Parse 对象(好吧,一个解析对象数组)。我想克隆对象,但我尝试的一切都失败了......因为更改原始对象属性也会更改克隆的相应属性。我尝试使用 Parse.Object.clone(),创建新的对象数组,更改为 JSON,然后进行深度克隆,但没有任何效果。经过一些研究,我遇到了这个这个,但这确实提供了一个真正的解决方案。

有没有什么好方法可以克隆 Parse 对象并使属性完全分开?

我基本上想要一个“取消”更改按钮,它会恢复到克隆版本而不保存。

javascript parse-platform parse-server

4
推荐指数
1
解决办法
1097
查看次数

使用远程数据加载语义 UI 下拉列表

我一直在阅读下拉菜单的语义 ui 远程内容文档(此处),但似乎无法弄清楚如何在我的情况下使用它。

我有一个函数可以查询 back4app(解析)所需的数据并将其转换为 JSON。如何将返回的数据填充到下拉列表中?我是否必须手动构建它,或者我可以以某种方式直接传递 JSON 吗?

jquery json semantic-ui

2
推荐指数
1
解决办法
4479
查看次数

从现有按钮创建按钮的数组(集合)

有没有一种简单的方法从我的表单上的现有按钮创建按钮集合?(在c#中).

我的表单上已经有一系列按钮,我想使用索引来访问它们...例如:

myButtonArray[0].ForeColor ...// Do something with it
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

编辑:我可以将数组设置为具有通用的OnClick事件吗?然后确定点击阵列中的哪个按钮,然后改变它的颜色?

c# collections

1
推荐指数
1
解决办法
2万
查看次数

解析Promise返回值

我有一个函数,可以运行查询(返回承诺),然后处理返回的数据。如何获得调用函数以访问已操纵的数据?

调用是这样的:

getAgeGroupList().then(function (result) {
        // Would like to access manipulated data here.
    });
Run Code Online (Sandbox Code Playgroud)

并且功能如下。该query.find()回报承诺的解析。

function getAgeGroupList(){
    var query = new Parse.Query("Fixtures_and_results");
    return query.find({
        success: function(results) {
             /* Manipulate results here, then return manipulated data */
             // How do I return the manipulated data? e.g return(newArray)
        },
        error: function(error) {  
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

javascript parse-platform

1
推荐指数
1
解决办法
768
查看次数