小编alb*_*ert的帖子

异步Thread.Sleep()

我想在两个操作之间放一个延迟而不保持线程忙

 workA();
 Thread.Sleep(1000);
 workB();
Run Code Online (Sandbox Code Playgroud)

线程必须在workA之后退出,并在延迟一段时间后执行workB(可能在新线程中).

我想知道这个伪代码是否有可能出现

workA();
Thread.BeginSleep(1000, workB); // callback
Run Code Online (Sandbox Code Playgroud)

编辑我的程序在.NET 2.0中

编辑2:System.Timers.Timer.Elapsed事件将在1000毫秒后引发事件.我不知道计时器线程是否会忙碌1000毫秒.(所以我没有获得线程经济)

.net multithreading

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

为什么Thread.Start可以抛出OutOfMemoryException

这个问题与我之前的问题 线程开销有关

既然Thread.Start没有声明线程运行的内存,为什么它可以扔OutOfMemoryException

.net c#

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

固定大小设置为包含给定集的最大数量

我有大约1000套大小<= 5,包含数字1到100.

{1}, {4}, {1,3}, {3,5,6}, {4,5,6,7}, {5,25,42,67,100} ... 
Run Code Online (Sandbox Code Playgroud)

是否有可能找到一组包含最大给定集数量的20?

检查每个100!/(80!*20!)集合是低效的.

algorithm set

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

字典与优先事项

我有一个类Item和一个Items字典.字典中的每个项目都具有唯一的优先级(1到N).当我从字典中删除项目时,所有其他优先级都会更新.我想在字典中实现一些增加/减少优先级.如果我想增加单个项目的优先级,我将优先级与下一个较低项目交换.问题是增加一系列项目的优先级

public class Item
{
    public string key;
    public string data;
    public int Priority;
}

Dictionary<string, Item> allItems = new Dictionary<string, Item>();

public void AddToQueue(Item item)
{
    item.Priority = allItems.Count + 1;
    allItems[item.key] = item;
}

public void PriorityUp(Item it)
{
    if(it.Priority <= 1)
        return;

    it.Priority--;

    foreach(var item in allItems )
        if(item.Value.Priority == it.Priority)
        {
            item.Value.Priority++;
            break;
        }
}

public void PriorityUp(IEnumerable<Item> items)
{
    //TODO
}
Run Code Online (Sandbox Code Playgroud)

我有字典,以便有效地找到一个项目.提高某些项目的优先级必须对其他项目的优先级进行一些改变

更清楚:我有N个项目的集合(列表,数组,字典...)我选择了字典,因为我还必须做一些其他的操作.每个项目都有一个字段优先级,其中一些唯一值1 <= P <= N.

当我选择一些并增加/减少P时,我想找到所有项目的结果优先级(1到N).

c# algorithm dictionary

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

列标题的 ListView ContextMenuStrip

当我右键单击 ListView 列标题和 ListView 中的另一个时,我会显示一个不同的 ContextMenuStrip。

class ListViewExx : ListView
{
    public ContextMenuStrip HeaderContextMenu { get; set; }
    int contextMenuSet = 0;
    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        base.WndProc(ref m);
        switch(m.Msg)
        {
            case 0x210: //WM_PARENTNOTIFY
                contextMenuSet = 1;
                break;
            case 0x21:  //WM_MOUSEACTIVATE
                contextMenuSet++;
                break;
            case 0x7b:  //WM_CONTEXTMENU
                if(contextMenuSet == 2 && HeaderContextMenu != null)
                    HeaderContextMenu.Show(Control.MousePosition);
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这非常有效。问题是我第一次在 ListView 中右键单击 - 显示了标题 contextMenuStrip。

c# listview winforms

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

带有 RecyclerView 和其他视图的 BottomSheet

我有一个带有BottomSheet的CoordinatorLayout。如果Bottomsheet 只有一个RecyclerView,则一切正常。我试图在 RecyclerView 顶部添加一些 Textview 和按钮,但是当它到达顶部高度时,recyclerview 会在另一个视图下方滚动。我希望其他视图也滚动。如果BottomSheet 只包含其他视图(没有Recyclerview)也可以正常工作。当我结合 RecyclerView 和其他视图元素(按钮、TextView)时,滚动不符合预期。

我想将 Recyclerview 上方的视图设置为列表的第一项,但这增加了适配器的复杂性。

   <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical"
      app:behavior_hideable="false"
      app:behavior_peekHeight="80dp"
      app:layout_behavior="@string/bottom_sheet_behavior">

      <Button
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="Button 1"/>
      <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="Text 2"/>
      <TextView
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:text="Text 3"/>

      <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:background="@android:color/white"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:clipToPadding="true"/>
   </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

android android-recyclerview android-coordinatorlayout bottom-sheet

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

排序时ListView闪烁

我有一个继承的列表视图,当我点击列标题时有明显的闪烁.列表在详细信息视图中.

    public ListViewEx()
    {
        this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
        this.DoubleBuffered = true;
    }

    int sortColumn = -1;
    protected override void OnColumnClick(ColumnClickEventArgs e)
    {
        if(e.Column != sortColumn)
        {
            sortColumn = e.Column;
            this.Sorting = SortOrder.Ascending;
        }
        else
        {
            if(this.Sorting == SortOrder.Ascending)
                this.Sorting = SortOrder.Descending;
            else
                this.Sorting = SortOrder.Ascending;
        }
        this.Sort();
    }
Run Code Online (Sandbox Code Playgroud)

填充列表时没有闪烁.

        for(int i = 0; i < 10; i++)
        {
            ListViewItem lvi = new ListViewItem("this is column 1 " +i);
            lvi.SubItems.Add("...
            lvi.SubItems.Add("...
            lvi.SubItems.Add("...
            lvi.SubItems.Add("...
            lvi.SubItems.Add("...

            listViewEx1.Items .Add (lvi);
        }
Run Code Online (Sandbox Code Playgroud)

编辑WM_ERASEBKGND并没有解决我的问题. …

listview winforms

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