小编isp*_*iro的帖子

我是否必须在短方法中使用"使用"语句?

我是否必须使用using声明即使在方法中立即处置?或者方法的结尾会导致Dispose所有局部变量(包括图形)的自动化吗?(我问这个是因为我看过Dispose在方法结束时调用的例子,并且想知道这是否真的有必要.)

谢谢.

c# garbage-collection dispose using

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

为什么BackgroundWorker可以修改UI组件?

我正在更改Text按钮BackgroundWorker,它可以工作.我以为应该抛出异常.为什么不呢?

为什么我没有得到Cross-thread operation not valid: ... accessed from a thread other than the thread it was created on.

编辑:谢谢大家.

也许原因是Thread.Sleep(1000);在UI上有一个:

public Form1()
{
    InitializeComponent();

    backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
    backgroundWorker1.RunWorkerAsync();
    Thread.Sleep(1000);
}

void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    button1.Text = "a";
}
Run Code Online (Sandbox Code Playgroud)

但是,我注意到以下代码运行良好,尽管影响了UI(间接).

public partial class Form1 : Form
{
    int i;

    public Form1()
    {
        InitializeComponent();

        i = 1;
        backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        backgroundWorker1.RunWorkerAsync();
        for (int j = 0; j < 100000000; j++) …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker

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

如何比较FieldInfo的实例值?

public partial class Form1 : Form
{        
    public Form1()
    {
        InitializeComponent();

        myClass instance1 = new myClass();
        myClass instance2 = new myClass();
        FieldInfo[] fields = typeof(myClass).GetFields();
        foreach (FieldInfo field in fields) if (field.GetValue(instance2) == field.GetValue(instance1)) Text = "Yes";           
    }
}

class myClass
{
    public bool b = false;
    public int i = 2;
}
Run Code Online (Sandbox Code Playgroud)

永远不会返回"是".

编辑:事先知道类型将是什么.所以我不能:(bool)field.GetValue(instance1).

.net c# reflection fieldinfo

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

将XML序列化为byte []而不是file

这必须非常简单,但我无法通过搜索找到它.

我有以下代码将对象序列化为文件并返回.但现在我想序列化为一个byte []并返回.

XmlSerializer serializer = new XmlSerializer(typeof(Class1));
using (TextWriter textWriter = new StreamWriter(path))
    serializer.Serialize(textWriter, class1);
using (TextReader textReader = new StreamReader(path))
    class1b = (Class1)serializer.Deserialize(textReader);
Run Code Online (Sandbox Code Playgroud)

我尝试使用MemoryStream:

byte[] buffer = new byte[1000];
using (TextWriter textWriter = new MemoryStream(buffer))
...
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误.那我该怎么办呢?

c# serialization xml-serialization

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

如何创建一个包含多个控件的ToolStripMenuItem?

例如Label和TextBox.

我试过了:

class MyClass : ToolStripPanel
{
      //...
}
Run Code Online (Sandbox Code Playgroud)

之类的.但是之后:

contextMenuStrip1.Items.Add(new MyClass());
Run Code Online (Sandbox Code Playgroud)

显示错误:

......无效的论点.

.net c# winforms

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

'if'语句如何在标记文件中起作用?

下面的作品.但为什么?

<% if (condition) { %> some html <% } %>
Run Code Online (Sandbox Code Playgroud)

我希望它要么没有效果,要么简单地抛出异常,因为每个部分都是无效的C#,也不是整个部分.

.net html asp.net

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

从 ServiceHost 获取端口号

我正在创建一个ServiceHost带有端口 0的 WCF以获得动态分配的端口:

ServiceHost host = new ServiceHost(typeof(MyClass), new Uri("net.tcp://localhost:0/abc"));
host.AddServiceEndpoint(typeof(MyInterface), new NetTcpBinding(SecurityMode.None), "net.tcp://localhost:0/abc");
Run Code Online (Sandbox Code Playgroud)

如何获得分配的端口号?

我试过:

host.ChannelDispatchers[0].Listener.Uri.Port
Run Code Online (Sandbox Code Playgroud)

但它只返回 0,这可能是错误的。

.net c# port wcf tcp

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

为什么Task.Factory.StartNew()需要使用CancellationToken重载?

我创建了一个以CancellationToken作为参数的方法,并在Task中使用了它,一切正常。那么,为什么令牌会过载StartNew呢?它有一定的效果,以防止可能的竞争条件下,我的代码没有,因此在其他情况下是必要的?

为什么 Task.Factory.StartNew(() => DoNow(), cancellationTokenSource.Token);

而不是:Task.Factory.StartNew(() => DoNow(cancellationTokenSource.Token));

.net c# multithreading

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

异步任务 - CPU 上实际发生了什么?

Task在提出这个问题后,我一直在阅读有关s 的内容,发现我完全误解了这个概念。此处此处的最佳答案等答案 解释了这个想法,但我仍然不明白。\n所以我提出了一个非常具体的问题:CPU 上实际发生了什么执行任务时

\n\n

这是我在阅读后了解到的:任务将与调用者共享 CPU 时间(假设调用者是“UI”),因此如果它是 CPU 密集型的,那么它会变慢下用户界面。如果任务不是CPU密集型的 - 它将“在后台”运行。在测试之前似乎足够清楚 \xe2\x80\xa6\xe2\x80\xa6 。下面的代码应该允许用户单击按钮,然后交替显示“已显示”和“按钮”。但实际上:表单完全繁忙(无法进行用户输入),直到“已显示”全部显示为止。

\n\n
public Form1()\n{\n    InitializeComponent();\n    Shown += Form1_Shown;\n}\n\nprivate async void Form1_Shown(object sender, EventArgs e)\n{\n    await Doit("Shown");\n}\n\nprivate async Task Doit(string s)\n{\n    WebClient client = new WebClient();\n    for (int i = 0; i < 10; i++)\n    {\n        client.DownloadData(uri);//This is here in order to delay the Text writing without much CPU use.\n        textBox1.Text += s …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading asynchronous async-await

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

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