小编Chr*_*tos的帖子

调用线程无法访问此对象,因为另一个线程拥有它

我的代码如下

public CountryStandards()
{
    InitializeComponent();
    try
    {
        FillPageControls();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Country Standards", MessageBoxButton.OK, MessageBoxImage.Error);
    }
}

/// <summary>
/// Fills the page controls.
/// </summary>
private void FillPageControls()
{
    popUpProgressBar.IsOpen = true;
    lblProgress.Content = "Loading. Please wait...";
    progress.IsIndeterminate = true;
    worker = new BackgroundWorker();
    worker.DoWork += new System.ComponentModel.DoWorkEventHandler(worker_DoWork);
    worker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(worker_ProgressChanged);
    worker.WorkerReportsProgress = true;
    worker.WorkerSupportsCancellation = true;
    worker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
    worker.RunWorkerAsync();                    
}

private void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    GetGridData(null, 0); // filling grid …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading backgroundworker

310
推荐指数
10
解决办法
24万
查看次数

Task.Run()和Task.Factory.StartNew()之间有什么区别

我有方法:

private static void Method()
{
    Console.WriteLine("Method() started");

    for (var i = 0; i < 20; i++)
    {
        Console.WriteLine("Method() Counter = " + i);
        Thread.Sleep(500);
    }

    Console.WriteLine("Method() finished");
}
Run Code Online (Sandbox Code Playgroud)

我想在一个新的Task中启动这个方法.我可以开始这样的新任务

var task = Task.Factory.StartNew(new Action(Method));
Run Code Online (Sandbox Code Playgroud)

或这个

var task = Task.Run(new Action(Method));
Run Code Online (Sandbox Code Playgroud)

但是Task.Run()和之间有什么区别吗Task.Factory.StartNew()?它们都使用ThreadPool并在创建Task的实例后立即启动Method().当我们应该使用第一个变体和第二个?

c# multithreading task-parallel-library

155
推荐指数
6
解决办法
8万
查看次数

使用不带参数的catch

有什么区别:

catch
{
    MessageBox.Show("Error.");
}
Run Code Online (Sandbox Code Playgroud)

和:

catch (Exception ex)
{
    MessageBox.Show("Error.");
    //we never use ex, so is it better to use catch without arguments?
}
Run Code Online (Sandbox Code Playgroud)

c# try-catch

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

具有optionsValue和value的knockout.js

有没有办法保持value绑定到对象,但有optionsValue一个属性在对象上.截至目前,如果我同时指定两者,optionsValue则所选的属性将填充value绑定.我希望在observable中保持对象完整,但是指定在选择列表值中设置的值.这样一个表单提交将发送optionsValue我选择的.

@Html.DropDownListFor(q => q.DivisionId, new SelectList(Enumerable.Empty<string>()), new { data_bind="options: divisions, optionsText: 'Name', optionsValue: 'Id', value: division, optionsCaption: ' - '" })

function AddCrossPoolGameDialog() {
    var self = this;

    self.divisions = ko.observableArray([]);
    self.division = ko.observable();

    self.awayDivisionTeams = ko.computed(function () {
        var division = ko.utils.arrayFirst(self.divisions(), function(item) {
            return self.division.Name() == item.Name;
        });

        if (division) {
            return division.DivisionTeamPools;
        }

        return [];
    });
}
Run Code Online (Sandbox Code Playgroud)

knockout.js

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

如何通过API C#和Template向SendGrid电子邮件添加自定义变量

我试图弄清楚如何将变量添加到已在sendgrid模板引擎中创建的现有模板(例如:动态链接或名称),我不确定如何使用SendGrid C#.NET库执行此操作.我想知道是否有人可以帮助我.

// Create the email object first, then add the properties.
SendGridMessage myMessage = new SendGridMessage();

myMessage.AddTo("test@test.com");
myMessage.From = new MailAddress("test@test.com", "Mr test");
myMessage.Subject = " ";

var timestamp = DateTime.Now.ToString("HH:mm:ss tt");
myMessage.Html = "<p></p> ";

myMessage.EnableTemplate("<p> <% body %> Hello</p>");
myMessage.EnableTemplateEngine("9386b483-8ad4-48c2-9ee3-afc7618eb56a");
var identifiers = new Dictionary<String, String>();
identifiers["USER_FULLNAME"] = "Jimbo Jones";
identifiers["VERIFICATION_URL"] = "www.google.com";
myMessage.AddUniqueArgs(identifiers);

// Create credentials, specifying your user name and password.
var credentials = new NetworkCredential("username", "password");
// Create an Web transport for sending email. …
Run Code Online (Sandbox Code Playgroud)

c# asp.net sendgrid

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

Mockito 在本地模拟最后一堂课,但在 Jenkins 中失败

我为静态方法编写了一些单元测试。静态方法只接受一个参数。参数的类型是 final 类。在代码方面:

public class Utility {

   public static Optional<String> getName(Customer customer) {
       // method's body.
   }
}

public final class Customer {
   // class definition
}
Run Code Online (Sandbox Code Playgroud)

因此,对于Utility该类,我创建了一个测试类,UtilityTests在该类中我为此方法编写了测试getName。单元测试框架是TestNG,使用的模拟库是Mockito. 所以一个典型的测试具有以下结构:

public class UtilityTests {

   @Test
   public void getNameTest() {
     // Arrange
     Customer customerMock = Mockito.mock(Customer.class);
     Mockito.when(...).thenReturn(...);

     // Act
     Optional<String> name = Utility.getName(customerMock);

     // Assert
     Assert.assertTrue(...);
   }
}
Run Code Online (Sandbox Code Playgroud)

问题是什么 ?

虽然测试在本地成功运行,但在 IntelliJ 中,它们在 Jenkins 上失败(当我将代码推送到远程分支时,会触发构建并在最后运行单元测试)。错误消息类似于以下内容:

org.mockito.exceptions.base.MockitoException: 不能模拟/监视类 com.packagename.Customer Mockito 不能模拟/监视,因为: - 最终类 …

java testng unit-testing mockito

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

在Roslyn分析器中检查表达式类型的正确方法?

我正在编写一个带有Roslyn的代码分析器,我需要检查它是否ExpressionSyntax是类型TaskTask<T>.

到目前为止我有这个:

private static bool IsTask(ExpressionSyntax expression, SyntaxNodeAnalysisContext context)
{
    var type = context.SemanticModel.GetTypeInfo(expression).Type;
    if (type == null)
        return false;
    if (type.Equals(context.SemanticModel.Compilation.GetTypeByMetadataName("System.Threading.Tasks.Task")))
        return true;
    if (type.Equals(context.SemanticModel.Compilation.GetTypeByMetadataName("System.Threading.Tasks.Task`1")))
        return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理为Task,但不适合Task<int>Task<string>...我可以核对姓名和命名空间,但它是不切实际的,因为我要检查每个命名空间的"级别".

有推荐的方法吗?

.net c# code-analysis roslyn

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

更快地访问List <int>的最后一个元素和第一个元素

我使用的语言是C#.

List<int> numbers = new List<int>();
Run Code Online (Sandbox Code Playgroud)

是一个整数列表,我们想用它们来做一些计算.访问列表的第一个元素是否更快?

numbers[0]
Run Code Online (Sandbox Code Playgroud)

或者作为

numbers.First()
Run Code Online (Sandbox Code Playgroud)

此外,如果我们想要访问列表的最后一个元素,则访问它的速度会更快

numbers[numbers.Count-1]
Run Code Online (Sandbox Code Playgroud)

或者作为

numbers.Last()
Run Code Online (Sandbox Code Playgroud)

c#

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

如何创建一个空的SelectList

我有folloiwng动作方法:

public JsonResult LoadSitesByCustomerName(string customername)
{
    var customerlist = repository.GetSDOrg(customername)
                                 .OrderBy(a => a.NAME)
                                 .ToList();
    var CustomerData;
    CustomerData = customerlist.Select(m => new SelectListItem()
    {
        Text = m.NAME,
        Value = m.NAME.ToString(),
    });
    return Json(CustomerData, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

但目前我收到以下错误var CustomerData;:

implicitly typed local variables must be initialized
Run Code Online (Sandbox Code Playgroud)

所以我不知道如何创建一个空的SelectList来将其分配给var变量?谢谢

c# linq asp.net asp.net-mvc

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

所有国家名单DropDown

我用这段代码用国家列表填充我的下拉列表:

public JsonResult GetAllCountries()
{
    var objDict = new Dictionary<string, string>();
    foreach (var cultureInfo in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
    {
        var regionInfo = new RegionInfo(cultureInfo.Name);
        if (!objDict.ContainsKey(regionInfo.EnglishName))
        {
            objDict.Add(cultureInfo.EnglishName, regionInfo.TwoLetterISORegionName.ToLower());
        }
    }
    var obj = objDict.OrderBy(p => p.Key).ToArray();

    return Json(obj.Select(t => new 
    { 
        Text = t.Key, 
        Value = t.Value 
    }), JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)

它填充了这种方式.我使用相同的代码,但控制台,并在这里显示不同.为什么?我该怎么做才能填充下拉列表,就像第二个一样?

c# asp.net-mvc razor

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