我是否必须使用using声明即使在方法中立即处置?或者方法的结尾会导致Dispose所有局部变量(包括图形)的自动化吗?(我问这个是因为我看过Dispose在方法结束时调用的例子,并且想知道这是否真的有必要.)
谢谢.
我正在更改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) 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).
这必须非常简单,但我无法通过搜索找到它.
我有以下代码将对象序列化为文件并返回.但现在我想序列化为一个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)
但是我收到了一个错误.那我该怎么办呢?
例如Label和TextBox.
我试过了:
class MyClass : ToolStripPanel
{
//...
}
Run Code Online (Sandbox Code Playgroud)
之类的.但是之后:
contextMenuStrip1.Items.Add(new MyClass());
Run Code Online (Sandbox Code Playgroud)
显示错误:
......无效的论点.
在下面的作品.但为什么?
<% if (condition) { %> some html <% } %>
Run Code Online (Sandbox Code Playgroud)
我希望它要么没有效果,要么简单地抛出异常,因为每个部分都是无效的C#,也不是整个部分.
我正在创建一个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,这可能是错误的。
我创建了一个以CancellationToken作为参数的方法,并在Task中使用了它,一切正常。那么,为什么令牌会过载StartNew呢?它有一定的效果,以防止可能的竞争条件下,我的代码没有,因此将在其他情况下是必要的?
为什么 Task.Factory.StartNew(() => DoNow(), cancellationTokenSource.Token);
而不是:Task.Factory.StartNew(() => DoNow(cancellationTokenSource.Token));?
Task在提出这个问题后,我一直在阅读有关s 的内容,发现我完全误解了这个概念。此处 和此处的最佳答案等答案 解释了这个想法,但我仍然不明白。\n所以我提出了一个非常具体的问题:CPU 上实际发生了什么执行任务时
这是我在阅读后了解到的:任务将与调用者共享 CPU 时间(假设调用者是“UI”),因此如果它是 CPU 密集型的,那么它会变慢下用户界面。如果任务不是CPU密集型的 - 它将“在后台”运行。在测试之前似乎足够清楚 \xe2\x80\xa6\xe2\x80\xa6 。下面的代码应该允许用户单击按钮,然后交替显示“已显示”和“按钮”。但实际上:表单完全繁忙(无法进行用户输入),直到“已显示”全部显示为止。
\n\npublic 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) 显然Grid.SetZIndex()不存在。就像ctrl.SetValue(Grid.ZIndexProperty ...)一样。
那么我该如何带一个孩子Grid到前面去呢?
c# ×9
.net ×6
asp.net ×1
async-await ×1
asynchronous ×1
dispose ×1
fieldinfo ×1
html ×1
port ×1
reflection ×1
tcp ×1
using ×1
wcf ×1
winforms ×1
winrt-xaml ×1
xaml ×1